查询对象与数组

时间:2017-01-07 16:40:37

标签: arrays mongodb mongodb-query documents

如何查询对象与文档中的对象数组?

我需要选择像Dataset 2这样的所有文档。

数据集1:

{
    'firstname' : 'John', 
    'lastname': 'Smith', 
    'assistance': [
        {'type': 'Food', 'amount': 20}
    ]
}

数据集2:

{
    'firstname' : 'John', 
    'lastname': 'Smith', 
    'assistance': {
        'type': 'Food', 
        'amount': 20
    }
}

3 个答案:

答案 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

中提到的文档

https://docs.mongodb.com/manual/reference/bson-types/

答案 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}})