首页 文章

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

提问于
浏览
33

我知道 $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 的单个字符串,但是此后的's not really what I' m .

2 回答

  • 62

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

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

    以下是dot notation相关文档的摘录 .

    MongoDB使用点表示法来访问数组的元素并访问子文档的字段 . 要通过从零开始的索引位置访问数组的元素,请将数组名称与点( . )和从零开始的索引位置连接起来,并用引号括起来:'<array> . <index>'

    此外,这里是相关array documentation的链接 .

  • 11

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

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

相关问题