Подтвердить что ты не робот

Запрос 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, но это не совсем то, что я здесь.

4b9b3361

Ответ 1

Я считаю, что вы хотите imgs.0. например, учитывая ваш примерный документ, вы хотите сказать: db.products.find({"imgs.0": "http://foo.jpg"})

Имейте в виду, что ссылки на индексы массивов работают только для массива первого уровня. Mongo не поддерживает индексы поисковых массивов еще глубже.

Ответ 2

Вы можете использовать точечную нотацию для индексов массива:

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

Вот выдержка из соответствующей документации для точечной нотации.

MongoDB использует точечную нотацию для доступа к элементам массива и доступа к полям вложенного документа.

Чтобы получить доступ к элементу массива с помощью позиции индекса на основе нуля, соедините имя массива с точкой (.) и позицией индекса на основе нуля и заключите в кавычки:

'<array>.<index>'

Кроме того, здесь приведена ссылка на соответствующую документацию массива .