Запрос MongoDB для совпадения в первом элементе массива
Мне известен оператор $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
, но это не совсем то, что я здесь.
Ответы
Ответ 1
Я считаю, что вы хотите imgs.0
. например, учитывая ваш примерный документ, вы хотите сказать: db.products.find({"imgs.0": "http://foo.jpg"})
Имейте в виду, что ссылки на индексы массивов работают только для массива первого уровня. Mongo не поддерживает индексы поисковых массивов еще глубже.
Ответ 2
Вы можете использовать точечную нотацию для индексов массива:
db.products.find({"imgs.0": "http://foo.jpg"})
Вот выдержка из соответствующей документации для точечной нотации.
MongoDB использует точечную нотацию для доступа к элементам массива и доступа к полям вложенного документа.
Чтобы получить доступ к элементу массива с помощью позиции индекса на основе нуля, соедините имя массива с точкой (.) и позицией индекса на основе нуля и заключите в кавычки:
'<array>.<index>'
Кроме того, здесь приведена ссылка на соответствующую документацию массива .