MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Използване на $slice с $regex заедно в масив subDocument в mongodb

Можете да използвате комбинация от $unwind и $match с mongo агрегиране за да получите очакван резултат като:

db.collection.aggregate({
    $match: {
    "_id": "3691149613248"  // you can skip this condition if not required
    }
}, {
    $unwind: "$following"
}, {
    $match: {
    "following.content_id": {
        $regex: /^369/
    }
    }
}, {
    $group: {
    _id: "$_id",
    "following": {
        $push: "$following"
    }
    }
})

Ако искате да приложите пропуснете и лимит към горната заявка, тогава можете лесно да я използвате като:

db.collection.aggregate({
    $match: {
    "_id": "3691149613248" //use this if you want to filter out by _id
    }
}, {
    $unwind: "$following"
}, {
    $match: {
    "following.content_id": {
        $regex: /^369/
    }
    }
}, {
    $skip: 4  // you can set offset here
}, {
    $limit: 3 // you can set limit here
}, {
    $group: {
    _id: "$_id",
    "following": {
        $push: "$following"
    }
    }
})

РЕДАКТИРАНЕ :

Ако използвате php версия по-малка от 5.4, тогава заявката ще бъде като:

$search = "369";
$criteria = array(array("$match" => array("_id" => "3691149613248")),
    array("$unwind" => "$following"),
    array("$match" => array("following.content_id" => array("$regex" => new MongoRegex("/^$search/")))),
    array("$skip" => 4), array("$limit" => 3),
    array("$group" => array("_id" => "$_id", "following" => array("$push" => "$following"))));
$collection - > aggregate($criteria);

Ако използвате PHP версия, по-висока от 5.3, просто заменете { и } скоби с [ и ] съответно.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Показване на данните върху уеб страница, извлечена от mongodb с помощта на node.js

  2. MongoDb заявка за сума

  3. Как да използвам mongoDB със Solr?

  4. BadYieldError при използване на двигател find() [MongoDB + Tornado]

  5. mongodb инсталиране - изисквания?