通过在数字索引数组中搜索值来查找文档

时间:2011-08-15 10:31:23

标签: arrays mongodb indexing

我有一个包含这样的记录的集合

{
   "_id":{
      "$oid":"4e3923963b123b59b73bde67"
   },
   "ident":"terrainHome",
   "columns":[
      [
         "4e3fbe57dccd1a0cc47509ab",
         "4e3fbe57dccd1a0cc47509ac"
      ],
      [

      ]
   ]
}

每个文档可以有两列或三列, 每列是一个块数组,存储在不同的集合中, 我想要一个查询,它将返回包含块的文档的标识。

我试过

 db.things.find({ columns[0] : "4e3fbe57dccd1a0cc47509ac" }); 

但这不起作用

我会继续努力。 :)

3 个答案:

答案 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的记录。

the first two suggestions didn't work, but thanks anyway

我已经尝试过几十种建议的解决方案,但它们都会出现空白结果。