উত্তর:
এটি "আইএমএজি ইউআরএল" নামক একটি কী দিয়ে সমস্ত দস্তাবেজ ফিরিয়ে দেবে, তবে তাদের এখনও একটি শূন্য মান থাকতে পারে।
db.mycollection.find({"IMAGE URL":{$exists:true}});
এটি "আইএমএজি ইউআরএল" নামে একটি কী এবং একটি নন-মান উভয়ই দিয়ে সমস্ত নথি ফিরিয়ে দেবে ।
db.mycollection.find({"IMAGE URL":{$ne:null}});
এছাড়াও, দস্তাবেজ অনুসারে, $ বিদ্যমান বর্তমানে একটি সূচক ব্যবহার করতে পারে না, তবে $ নে করতে পারে।
সম্পাদনা করুন: এই উত্তরের আগ্রহের কারণে কয়েকটি উদাহরণ যুক্ত করা হচ্ছে
এই সন্নিবেশগুলি দেওয়া:
db.test.insert({"num":1, "check":"check value"});
db.test.insert({"num":2, "check":null});
db.test.insert({"num":3});
এটি তিনটি নথি ফিরিয়ে দেবে:
db.test.find();
এটি কেবল প্রথম এবং দ্বিতীয় নথিগুলি ফিরিয়ে দেবে:
db.test.find({"check":{$exists:true}});
এটি কেবল প্রথম নথিটি ফিরিয়ে দেবে:
db.test.find({"check":{$ne:null}});
এটি কেবল দ্বিতীয় এবং তৃতীয় নথিগুলি ফিরিয়ে দেবে:
db.test.find({"check":null})
$ne
ক্ষেত্রটি অন্তর্ভুক্ত করে না এমন নথিগুলি অন্তর্ভুক্ত করে । আপনি উত্তর পোস্ট করার পরে এটি কি পরিবর্তন হয়েছে? docs.mongodb.org/manual/references/operator/query/ne
একটি লাইনার সেরা:
db.mycollection.find({ 'fieldname' : { $exists: true, $ne: null } });
এখানে,
মাইকোলিকেশন : আপনার পছন্দসই সংগ্রহের নাম দিন
FIELDNAME : আপনার পছন্দসই ক্ষেত্র নাম স্থান
ব্যাখ্যা:
$ বিদ্যমান : যখন সত্য হয়, $ বিদ্যমান ক্ষেত্রের নথির সাথে মেলে যেখানে ক্ষেত্রের মানটি শূন্য থাকে এমন নথি সহ। যদি এটি মিথ্যা হয় তবে ক্যোয়ারী কেবলমাত্র সেই দস্তাবেজগুলি ফিরিয়ে দেয় যা ক্ষেত্রটি ধারণ করে না।
ne ক্ষেত্রের মান নির্দিষ্ট মানের সমান নয় যেখানে নথি নির্বাচন করে। এর মধ্যে ক্ষেত্রটি অন্তর্ভুক্ত নয় এমন নথি রয়েছে।
সুতরাং আপনার প্রদত্ত ক্ষেত্রে নিম্নলিখিত প্রশ্নের সাথে ইমেজুরল ক্ষেত্রের সাথে সমস্ত দস্তাবেজ ফিরিয়ে দিতে যাচ্ছে এবং নাল মান নেই:
db.mycollection.find({ 'imageurl' : { $exists: true, $ne: null } });
$exists: true
অপ্রয়োজনীয়, $ne: null
যথেষ্ট।
$exists: true
মানগুলিও ফেরত দেয় null
। উভয় থাকতে হবে $exists: true
এবং $ne: null
। এটি অনর্থক নয়।
পাইমঙ্গোতে আপনি ব্যবহার করতে পারেন:
db.mycollection.find({"IMAGE URL":{"$ne":None}});
কারণ পাইমোঙ্গো মঙ্গোকে "নাল" হিসাবে পাইথন "কিছুই নয়" হিসাবে উপস্থাপন করে।
db.collection_name.find({"filed_name":{$exists:true}});
এই ফাইলড নামটি ধারণ করে এমন নথিগুলি আনুন এমনকি এটি বাতিল হয়।
আমার প্রস্তাব:
db.collection_name.find({"field_name":{$type:2}}) //type:2 == String
আপনি প্রয়োজনীয় বৈশিষ্ট্যের ধরণটি পরীক্ষা করতে পারেন, এটির ক্ষেত্রের নাম অনুসারে অনুসন্ধান করা সমস্ত দস্তাবেজ ফিরিয়ে দেবে কারণ আপনি দায়েরকৃত ধরণটি পরীক্ষা করে দেখছেন যদি অন্যথায় শর্তটি মেলে না তবে কিছুই ফিরে আসবে না।
নম্বর : যদি FIELD_NAME একটি খালি স্ট্রিং যার মানে "" আছে, এটা হবে returned.It জন্য একই আচরণ
db.collection_name.find({"filed_name":{$ne:null}});
অতিরিক্ত বৈধতা:
ঠিক আছে, সুতরাং আমরা এখনও শেষ হয়নি আমাদের একটি অতিরিক্ত শর্ত প্রয়োজন।
db.collection_name.
find({ "field_name":{$type:2},$where:"this.field_name.length >0"})
অথবা
db.collection_name.
find({ "field_name":{$ne:null},$where:"this.field_name.length >0"})
ভবিষ্যতের পাঠকদের জন্য ভাগ করে নেওয়া।
এই ক্যোয়ারীটি আমাদের জন্য কাজ করেছে ( মঙ্গোডিবি কম্পাস থেকে ক্যোয়ারী কার্যকর করা হয়েছে ):
{
"fieldName": {
"$nin": [
"",
null
]
}
}
db.<collectionName>.find({"IMAGE URL":{"$exists":"true"}, "IMAGE URL": {$ne: null}})
আদর্শ ক্ষেত্রে, আপনি তিনটি মানের , নাল , "" বা খালি পরীক্ষা করতে চান (ক্ষেত্রটি রেকর্ডে নেই)
আপনি নিম্নলিখিত করতে পারেন।
db.users.find({$and: [{"name" : {$nin: ["", null]}}, {"name" : {$exists: true}}]})
একটি বিকল্প যা উল্লেখ করা হয়নি, তবে কারও কারও পক্ষে এটি আরও কার্যকর বিকল্প হতে পারে (এনইউএলএল এন্ট্রিগুলির সাথে কাজ করবে না) হ'ল একটি স্পারস সূচক ব্যবহার করা (ক্ষেত্রের মধ্যে কিছু থাকে তবে সূচীতে এন্ট্রি উপস্থিত থাকে)। এখানে একটি নমুনা ডেটা সেট রয়েছে:
db.foo.find()
{ "_id" : ObjectId("544540b31b5cf91c4893eb94"), "imageUrl" : "http://example.com/foo.jpg" }
{ "_id" : ObjectId("544540ba1b5cf91c4893eb95"), "imageUrl" : "http://example.com/bar.jpg" }
{ "_id" : ObjectId("544540c51b5cf91c4893eb96"), "imageUrl" : "http://example.com/foo.png" }
{ "_id" : ObjectId("544540c91b5cf91c4893eb97"), "imageUrl" : "http://example.com/bar.png" }
{ "_id" : ObjectId("544540ed1b5cf91c4893eb98"), "otherField" : 1 }
{ "_id" : ObjectId("544540f11b5cf91c4893eb99"), "otherField" : 2 }
এখন, ইমেজ ইউআরএল ফিল্ডে স্পার্স সূচক তৈরি করুন:
db.foo.ensureIndex( { "imageUrl": 1 }, { sparse: true } )
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
এখন, সবসময়ই একটি সুযোগ থাকে (এবং বিশেষত আমার নমুনার মতো একটি ছোট ডেটা সেট সহ) যে সূচকটি ব্যবহার না করে মঙ্গোডিবি কোনও টেবিল স্ক্যান ব্যবহার করবে এমনকি কোনও সম্ভাব্য আচ্ছাদিত সূচক প্রশ্নের জন্যও। দেখা যাচ্ছে যে এখানে পার্থক্য বর্ণনা করার জন্য আমাকে একটি সহজ উপায় দেয়:
db.foo.find({}, {_id : 0, imageUrl : 1})
{ "imageUrl" : "http://example.com/foo.jpg" }
{ "imageUrl" : "http://example.com/bar.jpg" }
{ "imageUrl" : "http://example.com/foo.png" }
{ "imageUrl" : "http://example.com/bar.png" }
{ }
{ }
ঠিক আছে, সুতরাং অতিরিক্ত ডকুমেন্টগুলি imageUrl
ফিরিয়ে দেওয়া হচ্ছে না, খালি, আমরা যা চাইছিলাম তা নয়। কেবল তা নিশ্চিত করার জন্য, একটি ব্যাখ্যা করুন:
db.foo.find({}, {_id : 0, imageUrl : 1}).explain()
{
"cursor" : "BasicCursor",
"isMultiKey" : false,
"n" : 6,
"nscannedObjects" : 6,
"nscanned" : 6,
"nscannedObjectsAllPlans" : 6,
"nscannedAllPlans" : 6,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 0,
"server" : "localhost:31100",
"filterSet" : false
}
সুতরাং, হ্যাঁ, একটি BasicCursor
টেবিল স্ক্যানের সমান, এটি সূচকটি ব্যবহার করে না। আসুন প্রশ্নের সাথে আমাদের স্পার্স সূচকটি ব্যবহার করতে বলি hint()
:
db.foo.find({}, {_id : 0, imageUrl : 1}).hint({imageUrl : 1})
{ "imageUrl" : "http://example.com/bar.jpg" }
{ "imageUrl" : "http://example.com/bar.png" }
{ "imageUrl" : "http://example.com/foo.jpg" }
{ "imageUrl" : "http://example.com/foo.png" }
এবং ফলাফলটি আমরা সন্ধান করছিলাম - জনবহুল ক্ষেত্র সহ কেবলমাত্র নথিই ফিরে আসবে। এটি কেবল সূচকটিও ব্যবহার করে (অর্থাত এটি একটি আচ্ছাদিত সূচক ক্যোয়ারী), সুতরাং ফলাফলগুলি ফেরত দেওয়ার জন্য কেবল সূচকের স্মৃতিতে থাকা দরকার।
এটি একটি বিশেষ ব্যবহারের ক্ষেত্রে এবং সাধারণত ব্যবহার করা যায় না (এই বিকল্পগুলির জন্য অন্যান্য উত্তর দেখুন)। বিশেষত এটি লক্ষ করা উচিত যে জিনিসগুলি যেমন দাঁড়ায় আপনি count()
এইভাবে ব্যবহার করতে পারবেন না (আমার উদাহরণস্বরূপ এটি 4 না হয়ে 6 এ ফিরে আসবে), সুতরাং দয়া করে কেবল উপযুক্ত হলেই ব্যবহার করুন।
মঙ্গো কম্পাসে কলামটির অস্তিত্ব যাচাই করার সহজ উপায় হ'ল:
{ 'column_name': { $exists: true } }
প্রশ্ন হবে
db.mycollection.find({"IMAGE URL":{"$exists":"true"}})
এটি "চিত্রের URL টি" থাকা সমস্ত দস্তাবেজকে কী হিসাবে ফিরিয়ে দেবে ...........
$exists
কীটি পরীক্ষা "IMAGE URL"
করে এটির মান ( null
) মনে করে না এবং এটির সাথে একটি দস্তাবেজ ফিরিয়ে দেবে"IMAGE URL" : null
।
{ field : {$ne : null} }
না নাল জন্য চেক docs.mongodb.org/manual/reference/operator/query/ne