Vous pouvez utiliser une combinaison de $unwind et $match avec mongo agrégation pour obtenir la sortie attendue comme :
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"
}
}
})
Si vous souhaitez appliquer ignorer et limit à la requête ci-dessus, vous pouvez facilement l'utiliser comme :
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"
}
}
})
MODIFIER :
Si vous utilisez une version de PHP inférieure à 5.4, la requête sera la suivante :
$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);
Si vous utilisez une version PHP supérieure à 5.3, remplacez simplement {
et }
accolades avec [
et ]
respectivement.