查询对象与数组
Querying for an object vs array
如何查询文档中的对象与对象数组?
我需要 select 所有类似于数据集 2 的文档。
数据集 1:
{
'firstname' : 'John',
'lastname': 'Smith',
'assistance': [
{'type': 'Food', 'amount': 20}
]
}
数据集 2:
{
'firstname' : 'John',
'lastname': 'Smith',
'assistance': {
'type': 'Food',
'amount': 20
}
}
你可以使用 $type ,$type 不适用于 dataset1,原因是它不检查字段是否为数组,它检查的是字段 是否包含个数组
但是如果你正在寻找数据集 2,你可以使用 $type 作为对象
db.whatever.find( { "assistance" : { $type : 3 } } );
或
db.whatever.find( { "assistance" : { $type : "object" } } );
MongoDB 以 BSON 格式存储数据。
BSON代表二进制JSON.
BSON 支持文档中值的各种数据类型。
根据 MongoDB
的文档
$type selects the documents where the value of the field is an
instance of the specified BSON type.
根据上述文件
Dataset 1:Datatype of assistance field is an array.
Dataset2 : Datatype of assistance field is an object.
要仅检索包含以对象作为数据类型的辅助密钥的文档,请尝试在 MongoDB shell.
中执行以下查询
db.collection.find({协助:{$type:3}})
有关 BSON 类型的更多详细说明,请参阅下面提到的文档 URL
db.foo.find( { "assistance" : { $type : 3 } } ); // 3 is bson type for object
将 return 文档和
db.foo.find( { "assistance" : { $type : 4 } } ); // 4 is bson type for object
将returnnone两个文件.
这是因为在 mongodb 中查询数组时,会检查数组元素而不是整个数组。
您可以通过以下方式消除辅助类型为数组的所有元素:
db.foo.find({"assistance.0" : {$exists : false}})
如何查询文档中的对象与对象数组?
我需要 select 所有类似于数据集 2 的文档。
数据集 1:
{
'firstname' : 'John',
'lastname': 'Smith',
'assistance': [
{'type': 'Food', 'amount': 20}
]
}
数据集 2:
{
'firstname' : 'John',
'lastname': 'Smith',
'assistance': {
'type': 'Food',
'amount': 20
}
}
你可以使用 $type ,$type 不适用于 dataset1,原因是它不检查字段是否为数组,它检查的是字段 是否包含个数组
但是如果你正在寻找数据集 2,你可以使用 $type 作为对象
db.whatever.find( { "assistance" : { $type : 3 } } );
或
db.whatever.find( { "assistance" : { $type : "object" } } );
MongoDB 以 BSON 格式存储数据。
BSON代表二进制JSON.
BSON 支持文档中值的各种数据类型。
根据 MongoDB
的文档$type selects the documents where the value of the field is an instance of the specified BSON type.
根据上述文件
Dataset 1:Datatype of assistance field is an array.
Dataset2 : Datatype of assistance field is an object.
要仅检索包含以对象作为数据类型的辅助密钥的文档,请尝试在 MongoDB shell.
中执行以下查询db.collection.find({协助:{$type:3}})
有关 BSON 类型的更多详细说明,请参阅下面提到的文档 URL
db.foo.find( { "assistance" : { $type : 3 } } ); // 3 is bson type for object
将 return 文档和
db.foo.find( { "assistance" : { $type : 4 } } ); // 4 is bson type for object
将returnnone两个文件.
这是因为在 mongodb 中查询数组时,会检查数组元素而不是整个数组。
您可以通过以下方式消除辅助类型为数组的所有元素:
db.foo.find({"assistance.0" : {$exists : false}})