MongoDB में कई फ़ील्ड्स के योग के आधार पर दस्तावेज़ फ़िल्टर करने के लिए $where ऑपरेटर का उपयोग कर सकते हैं। यह JavaScript एक्सप्रेशन का मूल्यांकन करता है।
उदाहरण
कलेक्शन बनाएं:
> db.sumOfFieldIsGreaterThanDemo.insertOne({"Price1":10,"Price2":50,"Price3":40});
{ "acknowledged" : true, "insertedId" : ObjectId("5cdd84b8bf3115999ed511e6") }
> db.sumOfFieldIsGreaterThanDemo.insertOne({"Price1":11,"Price2":1,"Price3":120});
{ "acknowledged" : true, "insertedId" : ObjectId("5cdd84c6bf3115999ed511e7") }
> db.sumOfFieldIsGreaterThanDemo.insertOne({"Price1":10,"Price2":9,"Price3":6});
{ "acknowledged" : true, "insertedId" : ObjectId("5cdd84d2bf3115999ed511e8") }
सभी दस्तावेज़ देखें:
> db.sumOfFieldIsGreaterThanDemo.find();
आउटपुट:
{ "_id" : ObjectId("5cdd84b8bf3115999ed511e6"), "Price1" : 10, "Price2" : 50, "Price3" : 40 }
{ "_id" : ObjectId("5cdd84c6bf3115999ed511e7"), "Price1" : 11, "Price2" : 1, "Price3" : 120 }
{ "_id" : ObjectId("5cdd84d2bf3115999ed511e8"), "Price1" : 10, "Price2" : 9, "Price3" : 6 }
योग 100 से अधिक वाले दस्तावेज़ ढूंढें
> db.sumOfFieldIsGreaterThanDemo.find(
{$where: function() {
return this.Price1 + this.Price2 + this.Price3 > 100
}}
);
आउटपुट:
{ "_id" : ObjectId("5cdd84c6bf3115999ed511e7"), "Price1" : 11, "Price2" : 1, "Price3" : 120 }
चेतावनी: $where ऑपरेटर JavaScript इंजन का उपयोग करता है, जो धीमा हो सकता है। बड़े डेटासेट के लिए एग्रीगेशन पाइपलाइन में $add और $match का उपयोग करना बेहतर है:
db.collection.aggregate([
{$project: {total: {$add: ["$Price1", "$Price2", "$Price3"]}, doc: "$$ROOT"}},
{$match: {total: {$gt: 100}}},
{$replaceRoot: {newRoot: "$doc"}}
])