假设我有一个包含这样的文档的集合,其中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");
即。当字段实际上是一个字符串数组时,它能正常工作吗?
提前致谢。
答案 0 :(得分:2)
$in
适用于array fields以及非数组字段,所以在shell中它将是:
db.theCollection.find({crossRefs: {$in: ['10a', '1', '2']}})
这将找到至少有一个crossRefs
元素与$in
元素匹配的文档。
是的,这是索引该字段的正确方法,即使它是一个数组。