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

mongo find where var is found in array field

我有 mongo 数据如下:

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

我需要查找 "source1" 在源数组中的文档。 我试图让 $elemMatch 工作为:

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

return 没有任何文件。

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

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

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"}]
}

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

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

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