2012-03-14 19 views
20

यहां मेरी डेटा संरचना है।मोंगोडब और पिमोंगो में खाली खाली स्ट्रिंग

[{ 
"name": "David", 
"lastname": "", 
}, 
{ 
"name": "Angela" 
}] 

"उपनाम" कभी कभी वर्तमान और कभी कभी नहीं है और कुछ समय है ""।

मैं उन सभी पंक्तियों को प्राप्त करना चाहता हूं जिनके पास अंतिम नाम "" बराबर नहीं है। लेकिन यह काम नहीं करता है। यह पंक्तियों को वापस करता है जब अंतिम नाम "" होता है और जब अंतिम नाम बिल्कुल मौजूद नहीं होता है। ऊपर दिए गए उदाहरण में मैं केवल डेविड नोड प्राप्त करना चाहता हूं।

db.collection.find({"lastname": {"$ne": ""}}) 

उत्तर

57
db.collection.find({"lastname" : {"$exists" : true, "$ne" : ""}}) 

मोंगो खोल में (आईडी के स्थान बचाने के लिए छोड़े गए)

> db.collection.find() 
    { "name" : "Angela" } 
    { "name" : "David", "lastname" : "" } 
    { "name" : "Kyle", "lastname" : "Test" } 
    { "name" : "John", "lastname" : null } 

> db.collection.find({"lastname" : {"$exists" : true, "$ne" : ""}}) 
    { "name" : "Kyle", "lastname" : "Test" } 
    { "name" : "John", "lastname" : null } 

मामले में आप भी बाहर फ़िल्टर करना चाहते हैं शून्य मान आप इस प्रकार मापदंड समायोजित करने की आवश्यकता के खिलाफ मैच (हम भी $ से छुटकारा पा सकते के रूप में "$ ne" मौजूद है: अशक्त इसका ध्यान)

> db.collection.find({$and:[{"lastname": {"$ne": null}}, {"lastname": {"$ne": ""}}]}) 
    { "name" : "Kyle", "lastname" : "Test" } 
+0

पायथन के लिए लगभग $ ne उद्धरण आवश्यक हैं। तो अभिव्यक्ति {$ ne: ""} दोनों को सही मानती है जब level2_c "" है और जब level2_c नोड प्रारंभ करने के लिए मौजूद नहीं है। तो मुझे उन्हें इस {"level2_c" की तरह फ़िल्टर करना पड़ा: {"$ मौजूद है": सही}, "level1_b.level2_c": {"$ ne": ""}}। यह काम करता है लेकिन कुछ हद तक बदसूरत लग रहा है। –

+1

मैं मोंगो खोल से परीक्षण कर रहा था। खुशी है कि आपको सही जवाब मिला। – Kyle

+0

धन्यवाद। मैंने थोड़ा सा प्रश्न स्पष्ट किया। क्या आप इसे फिर से देख सकते हैं। क्या इससे बेहतर जवाब है: {"lastname": {"$ मौजूद है": सही}, "अंतिम नाम": {"$ ne": ""}}? –

0

आप एक regex क्वेरी का उपयोग कर सकते लेता है:

db.test.find({ "lastname": /(.|\s)*\S(.|\s)*/ })

इस regex शुरुआत या 0 या एन व्हाइटस्पेस (.|\s) के साथ समाप्त तार से मेल खाता है और यह बीच में \S एक या अधिक गैर व्हाइटस्पेस रहना होगा।

संबंधित मुद्दे