查询MongoDB以匹配数组中的第一项

时间:2013-11-11 05:15:18

标签: arrays mongodb mongodb-query

我知道$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")但不返回ObjectId("1"),因为它只会检查数组中的第一个图像。

如何实现这一目标?我知道我可以创建一个单独的字段,其中包含firstImg的单个字符串,但这并不是我在此之后所做的。

2 个答案:

答案 0 :(得分:71)

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

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

答案 1 :(得分:11)

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

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

以下摘自dot notation的相关文档。

  

MongoDB使用点表示法来访问数组的元素并访问子文档的字段。

     

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

     

'<array>.<index>'

此外,这是指向相关array documentation的链接。