U kunt een combinatie van $unwind gebruiken en $match met mongo aggregatie om verwachte output te krijgen zoals:
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"
}
}
})
Als u overslaan wilt toepassen en limiet naar bovenstaande vraag, dan kunt u deze gemakkelijk gebruiken als:
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"
}
}
})
BEWERKEN :
Als u een php-versie gebruikt die lager is dan 5.4, dan is de vraag als volgt:
$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);
Als je PHP-versie hoger dan 5.3 gebruikt, vervang dan gewoon {
en }
accolades met [
en ]
respectievelijk.