我有一个包含这样的记录的集合
{
"_id":{
"$oid":"4e3923963b123b59b73bde67"
},
"ident":"terrainHome",
"columns":[
[
"4e3fbe57dccd1a0cc47509ab",
"4e3fbe57dccd1a0cc47509ac"
],
[
]
]
}
每个文档可以有两列或三列, 每列是一个块数组,存储在不同的集合中, 我想要一个查询,它将返回包含块的文档的标识。
我试过
db.things.find({ columns[0] : "4e3fbe57dccd1a0cc47509ac" });
但这不起作用
我会继续努力。 :)
答案 0 :(得分:1)
你在这里混合类型(ObjectId!= String)。您应该始终将ObjectId保存为有时不作为字符串,就像在数组中一样。这可能不是你问题的根源,但以后可能会有问题。
在您的示例中,您可以执行此操作:
db.things.find({ "columns.0" : "4e3fbe57dccd1a0cc47509ac" });
一般来说,数组数组在查询结构时更具挑战性(如嵌入式文档)。
答案 1 :(得分:0)
如果您不关心匹配的位置,请尝试
db.things.find({'columns' : $in : ["4e3fbe57dccd1a0cc47509ac"] });
答案 2 :(得分:0)
此作品
db.things.find({"$where":"typeof(this.columns[0]) != \"undefined\" && this.columns[0].indexOf(\"4e48ed8245333bd40d000010\") != -1"});
我会在几天左右的时间内接受我自己的回答,除非有人能提出更简单的解决方案。
另外这里是两个建议的解决方案的mongo控制台的屏幕抓取不起作用,(感谢花时间),加上我发现有效的复杂解决方案。屏幕抓取演示集合中有文档,两个建议的查找命令,以及$ where javascript解决方案,显示这适用于数组中的第一项,数组中的第二项,并且不返回非匹配id的记录。
我已经尝试过几十种建议的解决方案,但它们都会出现空白结果。