56

我知道该$in运算符似乎在搜索数组中是否存在某个项目,但我只想在该项目位于数组中的第一个位置时找到匹配项。

例如:

{
    "_id" : ObjectId("0"),
    "imgs" : [
        "http://foo.jpg",
        "http://bar.jpg",
        "http://moo.jpg",
        ]
},
{
    "_id" : ObjectId("1"),
    "imgs" : [
        "http://bar.jpg",
        "http://foo.jpg",
        "http://moo.jpg",
        ]
}

我正在寻找类似于以下内容的查询:

db.products.find({"imgs[0]": "http://foo.jpg"})

这将/应该返回ObjectId("0")but not ObjectId("1"),因为它只检查数组中的第一个图像。

如何做到这一点?我知道我可以只创建一个包含单个字符串的单独字段,firstImg但这并不是我真正想要的。

4

2 回答 2

106

相信你想要imgs.0。例如,给定您的示例文档,您想说:db.products.find({"imgs.0": "http://foo.jpg"})

请注意,引用数组索引仅适用于第一级数组。Mongo 不支持更深入地搜索数组索引。

于 2013-11-11T05:19:06.080 回答
13

您可以对数组索引使用点表示法:

db.products.find({"imgs.0": "http://foo.jpg"})

这是dot notation相关文档的摘录。

MongoDB 使用点符号来访问数组的元素和访问子文档的字段。

要通过从零开始的索引位置访问数组的元素,请将数组名称与点 (.) 和从零开始的索引位置连接起来,并用引号引起来:

'<array>.<index>'

此外,这里是相关数组文档的链接。

于 2013-11-11T05:20:56.713 回答