我有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错误,否则使用它可能是错误的。 如何查找文档中的数组字段包含特定元素的位置?
答案 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
上添加索引,它可以正常工作。