mongo找到在数组字段中找到var的位置

时间:2015-02-15 21:58:55

标签: mongodb mongodb-query

我有mongo数据,如下所示:

{
    "name": "test1",
    "source": ["source1"]
},
{ 
    "name": "test2",
    "source": ["source1", "source2"]
}

我需要找一个文件,其中" source1"在源数组中。 我试图将$ elemMatch作为:

db.myCollection.find({source:{$ elemMatch:{$ eq:[' source1']}}}) 也试过了 db.myCollection.find({source:{$ elemMatch:{$ eq:{source:" source1"}}}})

不返回任何文件。

我必须使用$ elemMatch错误,否则使用它可能是错误的。 如何查找文档中的数组字段包含特定元素的位置?

2 个答案:

答案 0 :(得分:2)

如果要搜索简单元素和子文档,请使用以下语法。

db.mycollection.find({"source":"source1"}})

这是有效的,因为数组中的元素不是文档,而是文字。查询条件应用于每个文字。如果找到匹配的文字,则返回该特定文档。

如果您确实想使用此处不需要的$elemMatch,则语法为:

db.mycollection.find({"source":{$elemMatch:{$eq:"source1"}}})

您尝试的查询:

db.myCollection.find({source: {$elemMatch: {$eq:{source: "source1"}}}})
如果源数组中包含子文档,

将起作用,例如:

{ 
    "name": "test2",
    "source": [{"source":"source1"}]
}

答案 1 :(得分:2)

此处您不需要$elemMatch。如果你的字段是一个数组(source: [1, ..., 4]),你只需找到那里是否存在一个元素,你只需要一个简单的查找。

db.mycollection.find({source: 'source1'}})

另请注意,您可以在字段source上添加索引,它可以正常工作。