MongoDB में फील्ड में स्ट्रिंग या नंबर (दोनों प्रकार) के मान खोजने के लिए $in ऑपरेटर में दोनों मान प्रकार शामिल करें।
उदाहरण
एक ही मान स्ट्रिंग और नंबर दोनों रूपों में वाले दस्तावेज़ बनाएं:
> db.searchForStringOrNumberDemo.insertOne(
{
"_id": new ObjectId(),
"StudentName": "Larry",
"StudentDetails": {
"StudentMarks": {
"StudentMongoDBMarks": [44]
}
}
}
);
{ "acknowledged" : true, "insertedId" : ObjectId("5ce2407c36e8b255a5eee944") }
> db.searchForStringOrNumberDemo.insertOne(
{
"_id": new ObjectId(),
"StudentName": "Larry",
"StudentDetails": {
"StudentMarks": {
"StudentMongoDBMarks": ["44"]
}
}
}
);
{ "acknowledged" : true, "insertedId" : ObjectId("5ce240f036e8b255a5eee945") }
दस्तावेज़ देखें:
> db.searchForStringOrNumberDemo.find().pretty();
{ "_id" : ObjectId("5ce2407c36e8b255a5eee944"), "StudentName" : "Larry", "StudentDetails" : { "StudentMarks" : { "StudentMongoDBMarks" : [ 44 ] } } }
{ "_id" : ObjectId("5ce240f036e8b255a5eee945"), "StudentName" : "Larry", "StudentDetails" : { "StudentMarks" : { "StudentMongoDBMarks" : [ "44" ] } } }
स्ट्रिंग "44" या नंबर 44 दोनों खोजें
> db.searchForStringOrNumberDemo.find({
"StudentDetails.StudentMarks.StudentMongoDBMarks": {
"$in": ["44", 44]
}
});
आउटपुट:
{ "_id" : ObjectId("5ce2407c36e8b255a5eee944"), "StudentName" : "Larry", "StudentDetails" : { "StudentMarks" : { "StudentMongoDBMarks" : [ 44 ] } } }
{ "_id" : ObjectId("5ce240f036e8b255a5eee945"), "StudentName" : "Larry", "StudentDetails" : { "StudentMarks" : { "StudentMongoDBMarks" : [ "44" ] } } }
व्याख्या:
$inसरणी में किसी भी मान से मेल खाता है["44", 44]में स्ट्रिंग और नंबर दोनों शामिल हैं- MongoDB सख्त प्रकार जांच करता है, इसलिए दोनों निर्दिष्ट करना आवश्यक है
- डॉट नोटेशन नेस्टेड सरणी फील्ड तक पहुंचता है
सरणी फील्ड में $in व्यवहार
जब फील्ड सरणी हो, $in जांचता है कि क्या सरणी का कोई भी तत्व दी गई सूची में है।
विकल्प: $or ऑपरेटर
db.collection.find({
$or: [
{"field": 44},
{"field": "44"}
]
})
यह समान परिणाम देता है लेकिन अधिक वर्बोज़ है।
बेस्ट प्रैक्टिस: डेटा डालते समय डेटा प्रकार सुसंगत रखें (हमेशा नंबर या हमेशा स्ट्रिंग) ताकि ऐसी क्वेरी की आवश्यकता न पड़े।