仅匹配mongodb中具有子文档的文档

时间:2015-04-14 10:27:26

标签: regex mongodb

如果我至少知道一个子文档字段,我可以匹配该文档。

但是,如何才能找到包含子文档的文档,而不知道它们中包含哪些内容?

我希望匹配如下:

{ "_id" : ObjectId("552ce53438511d3da606b487"), "name" : { "first" : "1", "second" : "2" } }

find({"name":{$exists: true}})

它确实匹配,但是与只有值的字段匹配,内部没有子文档。

3 个答案:

答案 0 :(得分:0)

您可以使用以下内容:

find({
 "name" : { 
  $regex : /{[\s\S]+}/
 }
});

答案 1 :(得分:0)

正如您所注意到的,$exists只会测试该字段是否存在。如果具有字符串或对象的值(包括null),则为true。查看子文档是否存在的一种方法是测试子文档路径是否存在:

find({$or: [{name: {first: {$exists: true}}}, {name: {last: {$exists: true}}}]})

答案 2 :(得分:-1)

如果要获取除空name对象(不是对象数组)之外的所有文档,则可以查询为:

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

OR

db.collection.find({"$and":[{"name":{"$exists":true}},{"name":{"$ne":{}}}]})