आप सामान्य क्वेरी मिलान के साथ किसी अन्य फ़ील्ड के मान वाले फ़ील्ड की तुलना नहीं कर सकते हैं। हालांकि, अगर आप एकत्रीकरण ढांचे के साथ ऐसा कर सकते हैं:
db.so.aggregate([
{ $match: …your normal other query… },
{ $match: { $eq: [ '$modified', '$sync' ] } }
]);
मैं ... डाल अपनी सामान्य अन्य प्रश्न ... वहाँ के रूप में आपको लगता है कि थोड़ा इंडेक्स का उपयोग कर सकते हैं। तो अगर आप केवल दस्तावेज़ों के लिए यह करने के लिए जहां name
क्षेत्र है चाहता हूँ charles
आप कर सकते हैं:
{ "_id" : ObjectId("520276459bf0f0f3a6e4589c"), "modified" : 73845345, "sync" : 73234 }
{ "_id" : ObjectId("5202764f9bf0f0f3a6e4589d"), "modified" : 4, "sync" : 4 }
{ "_id" : ObjectId("5202765b9bf0f0f3a6e4589e"), "modified" : 4, "sync" : 4, "name" : "charles" }
{ "_id" : ObjectId("5202765e9bf0f0f3a6e4589f"), "modified" : 4, "sync" : 45, "name" : "charles" }
{ "_id" : ObjectId("520276949bf0f0f3a6e458a1"), "modified" : 46, "sync" : 45, "name" : "charles" }
यह रिटर्न:
db.so.ensureIndex({ name: 1 });
db.so.aggregate([
{ $match: { name: 'charles' } },
{ $project: {
modified: 1,
sync: 1,
name: 1,
eq: { $cond: [ { $gt: [ '$modified', '$sync' ] }, 1, 0 ] }
} },
{ $match: { eq: 1 } }
]);
इनपुट के साथ
{
"result" : [
{
"_id" : ObjectId("520276949bf0f0f3a6e458a1"),
"modified" : 46,
"sync" : 45,
"name" : "charles",
"eq" : 1
}
],
"ok" : 1
}
आप तो किसी और फ़ील्ड चाहते हैं, आपको उन्हें $project
में जोड़ना होगा।
धन्यवाद दोस्तों, दोनों aggr और क्वेरी काम करना चाहिए। –
आपको वास्तव में '' $ जहां 'संस्करण से बचना चाहिए, क्योंकि यह जावास्क्रिप्ट के माध्यम से जाता है। इसके अलावा, कृपया उत्तर स्वीकार करें। – Derick