Как проверить, существует или нет поле в MongoDB?
Я создал несколько документов и сделал несколько простых запросов, но я не могу создать запрос, который бы нашел документы, где поле существует.
Например, предположим, что это документ:
{ "profile_sidebar_border_color" : "D9B17E" ,
"name" : "???? ???????" , "default_profile" : false ,
"show_all_inline_media" : true , "otherInfo":["text":"sometext", "value":123]}
Теперь мне нужен запрос, который принесет все документы, где текст в otherInfo
имеет что-то в нем.
если текст отсутствует, тогда otherInfo
будет выглядеть следующим образом: "otherInfo":[]
Итак, я хочу проверить существование поля text
в otherInfo
.
Как я могу это достичь?
Ответы
Ответ 1
Вы можете использовать оператор $exists
в сочетании с нотой .
. Голый запрос в mongo-shell должен выглядеть следующим образом:
db.yourcollection.find({ 'otherInfo.text' : { '$exists' : true }})
И тестовый пример в Java может выглядеть так:
BasicDBObject dbo = new BasicDBObject();
dbo.put("name", "first");
collection.insert(dbo);
dbo.put("_id", null);
dbo.put("name", "second");
dbo.put("otherInfo", new BasicDBObject("text", "sometext"));
collection.insert(dbo);
DBObject query = new BasicDBObject("otherInfo.text", new BasicDBObject("$exists", true));
DBCursor result = collection.find(query);
System.out.println(result.size());
System.out.println(result.iterator().next());
Вывод:
1
{ "_id" : { "$oid" : "4f809e72764d280cf6ee6099"} , "name" : "second" , "otherInfo" : { "text" : "sometext"}}
Ответ 2
Не будет ли в запросе отфильтровывать все элементы с текстовым значением, указанным ниже.
db.things.find({otherInfo:{$in: [text]}});
BasicDBObject query = new BasicDBObject();
query.put("otherInfo", new BasicDBObject("$in", "[text]"));
var result = db.find(query);