我知道$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
的单个字符串,但这并不是我在此之后所做的。
答案 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的链接。