[英]MongoDB: How to find (and return) elements in a multidimensional array?
[英]How to make MongoDB find nested json return as an array?
我有此数据:
{
"_id" : ObjectId("5461e16ee7caf96f8f3584a2"),
"num_marcacao" : "100",
"sexo" : "Fêmea",
"idade" : "20",
"bigdata" : {
"abortos" : [
{
"data_aborto" : "2014-11-11",
"causa_aborto" : "Aborto causa 1"
},
{
"data_aborto" : "2014-09-01",
"causa_aborto" : "Aborto causa 2"
}
],
"crias" : [
ObjectId("5461e16ee7caf96f8f3584a2")
]
}
}
{
"_id" : ObjectId("5461e1cae7caf96f8f3584a4"),
"num_marcacao" : "200",
"sexo" : "Fêmea",
"bigdata" : {
"crias" : [
ObjectId("5461e1f3e7caf96f8f3584a5"),
ObjectId("5461e760e7caf96f8f3584a6")
]
}
}
使用以下独特的功能,我得到一个结果
db.animal.distinct('_id', {'bigdata.crias':{$exists:true}}
结果:
{
"0" : ObjectId("5461e16ee7caf96f8f3584a2"),
"1" : ObjectId("5461e1cae7caf96f8f3584a4")
}
现在,我想获取bigdata.crias
的数组,就像非bigdata.crias
查询的结果一样。 我正在尝试这样做:
db.animal.find(
{
$and: [
{'num_marcacao': '200'},
{'bigdata.crias':{$exists: true}}
]
},
{
'bigdata.crias': true,
'_id': false
}
)
但是结果却不像我需要的那样。 这就是返回的内容:
{
"bigdata" : {
"crias" : [
ObjectId("5461e1f3e7caf96f8f3584a5"),
ObjectId("5461e760e7caf96f8f3584a6")
]
}
}
我需要
{
"0" : ObjectId("5461e1f3e7caf96f8f3584a5"),
"1" : ObjectId("5461e760e7caf96f8f3584a6")
}
无论如何。 MongoDB通常不会通过.find()
或.aggregate()
方法或它们周围的任何常规方法来执行此操作。 只有.distinct()
方法会调用一种特殊形式,其中给出的结果是“真正的”,只是指定的“键”的数组不同。
您始终可以“检查”返回的对象,而只需在结构中使用数组元素。 您还可以首先为.distinct()
命令方法指定一个“查询”参数:
db.collection.distinct(
"bigdata.crias",
{
"bigdata.crias": { "$exists": true },
"num_marcacao": "200"
}
);
您还会看到$and
参数是多余的。 默认情况下,所有MongoDB查询参数都是“和”实现。 除非您在同一“字段名称”上指定“多个”条件,否则您不需要这样做。 这将破坏基本的“哈希/映射”“唯一键”规则,从而导致无效对象,这就是为什么“ array”用于此表单以使其保持有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.