MongoDB 3.6 और उच्चतर के लिए, $expr
ऑपरेटर जो क्वेरी भाषा के भीतर एकत्रीकरण अभिव्यक्तियों के उपयोग की अनुमति देता है:
var followers_count = 30;
db.locations.find({
"$expr": {
"$and": [
{ "$eq": ["$name", "development"] },
{ "$gte": [{ "$size": "$followers" }, followers_count ]}
]
}
});
गैर-संगत संस्करणों के लिए, आप $match
और $redact
आपके संग्रह को क्वेरी करने के लिए पाइपलाइन। उदाहरण के लिए, यदि आप locations
के बारे में पूछना चाहते हैं संग्रह जहां नाम 'विकास' और followers_count
. है 30 से अधिक है, निम्नलिखित समग्र संचालन चलाएँ:
const followers_count = 30;
Locations.aggregate([
{ "$match": { "name": "development" } },
{
"$redact": {
"$cond": [
{ "$gte": [ { "$size": "$followers" }, followers_count ] },
"$$KEEP",
"$$PRUNE"
]
}
}
]).exec((err, locations) => {
if (err) throw err;
console.log(locations);
})
या एक ही पाइपलाइन के भीतर
. के रूप मेंLocations.aggregate([
{
"$redact": {
"$cond": [
{
"$and": [
{ "$eq": ["$name", "development"] },
{ "$gte": [ { "$size": "$followers" }, followers_count ] }
]
},
"$$KEEP",
"$$PRUNE"
]
}
}
]).exec((err, locations) => {
if (err) throw err;
console.log(locations);
})
उपरोक्त स्थानों को केवल _id
. के साथ लौटाएगा उपयोगकर्ताओं से संदर्भ। फॉलोअर्स सरणी को "पॉप्युलेट" करने के साधन के रूप में उपयोगकर्ताओं के दस्तावेज़ों को वापस करने के लिए, आप $lookup
पाइपलाइन।
यदि अंतर्निहित मोंगो सर्वर संस्करण 3.4 और नया है, तो आप पाइपलाइन को इस रूप में चला सकते हैं
let followers_count = 30;
Locations.aggregate([
{ "$match": { "name": "development" } },
{
"$redact": {
"$cond": [
{ "$gte": [ { "$size": "$followers" }, followers_count ] },
"$$KEEP",
"$$PRUNE"
]
}
},
{
"$lookup": {
"from": "users",
"localField": "followers",
"foreignField": "_id",
"as": "followers"
}
}
]).exec((err, locations) => {
if (err) throw err;
console.log(locations);
})
अन्यथा आपको $unwind
$lookup
और फिर $group
उसके बाद पाइपलाइन:
let followers_count = 30;
Locations.aggregate([
{ "$match": { "name": "development" } },
{
"$redact": {
"$cond": [
{ "$gte": [ { "$size": "$followers" }, followers_count ] },
"$$KEEP",
"$$PRUNE"
]
}
},
{ "$unwind": "$followers" },
{
"$lookup": {
"from": "users",
"localField": "followers",
"foreignField": "_id",
"as": "follower"
}
},
{ "$unwind": "$follower" },
{
"$group": {
"_id": "$_id",
"created": { "$first": "$created" },
"name": { "$first": "$name" },
"followers": { "$push": "$follower" }
}
}
]).exec((err, locations) => {
if (err) throw err;
console.log(locations);
})