如果我至少知道一个子文档字段,我可以匹配该文档。
但是,如何才能找到包含子文档的文档,而不知道它们中包含哪些内容?
我希望匹配如下:
{ "_id" : ObjectId("552ce53438511d3da606b487"), "name" : { "first" : "1", "second" : "2" } }
带
find({"name":{$exists: true}})
它确实匹配,但是与只有值的字段匹配,内部没有子文档。
答案 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":{}}}]})