我有一个数据集,其中json由其中包含多个json的数组组成。
数组中的对象有4个键,其中有些缺少1个。
我想获取数组中所有对象都缺少键的文档。
例如,来自以下这些文件:
{"test":1,desc:[{"price":1,"abc":"def"},{"price":2,"ac":"def"}]}
{"test":1,desc:[{"price":1,"abc":"def"},{"ac":"def"}]}
{"test":1,desc:[{"abc":"def"},{"ac":"def"}]}
我只想匹配最后一个文档。
预先感谢..
您可以只使用$exists:
db.collection.find(
{
"desc.price": {$exists: false}
}
)
并且如果您还要其他字段:
db.collection.find(
{
$or: [
{
"desc.price": {$exists: false}
},
{
"desc.abc": {$exists: false}
},
{
"desc.ac": {$exists: false}
}
]
}
)
要注意的是,此查询将始终匹配一个空数组,即desc = []
。如果要确保至少有一个对象,请使用此查询:
db.collection.find(
{
$and: [
{
"desc.price": {$exists: false}
},
{
"desc.0": {$exists: true}
}
]
}
)