如何检查MongoDB中是否存在字段?

时间:2012-04-07 19:31:49

标签: java 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字段。

我怎样才能做到这一点?

4 个答案:

答案 0 :(得分:54)

您可以将$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"}}

答案 1 :(得分:1)

或者您可以使用:

import static com.mongodb.client.model.Filters.exists;

Document doc = (Document) mongoCollection.find(exists("otherInfo")).first();

答案 2 :(得分:0)

in查询不会过滤掉所有带有文本值的元素,如下所示。

db.things.find({otherInfo:{$in: [text]}});

BasicDBObject query = new BasicDBObject();
query.put("otherInfo", new BasicDBObject("$in", "[text]"));
var result = db.find(query);

答案 3 :(得分:0)

您可以使用container_of类来构建Matt答案中提供的查询:

com.mongodb.QueryBuilder