Możesz użyć kombinacji $unwind i $match z mongo agregacja aby uzyskać oczekiwany wynik, taki jak:
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"
}
}
})
Jeśli chcesz zastosować pomiń i limit do powyższego zapytania możesz go łatwo użyć w następujący sposób:
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"
}
}
})
EDYTUJ :
Jeśli używasz php w wersji niższej niż 5.4, zapytanie będzie wyglądało następująco:
$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);
Jeśli używasz PHP w wersji wyższej niż 5.3, po prostu zastąp {
i }
nawiasy klamrowe z [
i ]
odpowiednio.