如何查询对象与文档中的对象数组?
我需要选择像Dataset 2这样的所有文档。
数据集1:
{
'firstname' : 'John',
'lastname': 'Smith',
'assistance': [
{'type': 'Food', 'amount': 20}
]
}
数据集2:
{
'firstname' : 'John',
'lastname': 'Smith',
'assistance': {
'type': 'Food',
'amount': 20
}
}
答案 0 :(得分:0)
你可以使用$type,$ type不适用于dataset1,原因是它不检查字段是否为数组,它检查的是字段包含< / strong>数组与否。
但是如果你正在寻找数据集2,你可以使用$ type作为对象
db.whatever.find( { "assistance" : { $type : 3 } } );
或
db.whatever.find( { "assistance" : { $type : "object" } } );
答案 1 :(得分:0)
MongoDB以 BSON 格式存储数据。
BSON 代表二进制JSON 。
BSON支持文档中值的各种数据类型。
根据MongoDB的文档
$ type选择字段值为的文档 指定BSON类型的实例。
根据上述文件
数据集1:辅助字段的数据类型是一个数组。
数据集2:辅助字段的数据类型是一个对象。
要仅检索包含将对象作为数据类型的辅助键的文档,请尝试在MongoDB shell中执行以下查询。
db.collection.find({援助:{$类型:3}})
有关BSON类型的更多详细说明,请参阅以下URL
中提到的文档答案 2 :(得分:0)
db.foo.find( { "assistance" : { $type : 3 } } ); // 3 is bson type for object
将返回文档和
db.foo.find( { "assistance" : { $type : 4 } } ); // 4 is bson type for object
将不会返回这两个文件。
这是因为在mongodb中,当查询数组时,会检查数组元素而不是整个数组。
您可以通过以下方式消除协助类型为array的所有元素:
db.foo.find({"assistance.0" : {$exists : false}})