如何将数组与另一个数组查询匹配

时间:2014-08-28 16:07:34

标签: mongodb mongodb-query

假设我有一个包含这样的文档的集合,其中crossRefs字段是一个字符串数组:

{ name: "joe", crossRefs: [ "1" , "2" , "10a"] }
{ name: "jane", crossRefs: [ "10a" , "0xfgh" , "9"] }
{ name: "john", crossRefs: [ "11" , "hhj12" , "13dd"] }
...

问题1:如何使用字符串数组构建针对crossRef的查询

我想查询一下"给我所有任何一个 crossRefs' 10a'' 1&#39的文件;和' 2'"。因此,上述3个文档的结果只是第2个。我认为我需要$elemMatch$in结合or s但我只是在&#39 ;我知道如何制定这个。

问题2:如何指定索引

我希望MongoDB能够基于crossRefs字段构建索引。在Java中,这很简单:

mainDB.getCollection("theCollection").ensureIndex("crossRefs");

即。当字段实际上是一个字符串数组时,它能正常工作吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

$in适用于array fields以及非数组字段,所以在shell中它将是:

db.theCollection.find({crossRefs: {$in: ['10a', '1', '2']}})

这将找到至少有一个crossRefs元素与$in元素匹配的文档。

是的,这是索引该字段的正确方法,即使它是一个数组。