Если у меня есть эта схема ...
person = {
name : String,
favoriteFoods : Array
}
... где favoriteFoods
массив заполнен строками. Как я могу найти всех людей, у которых есть "суши" как их любимая еда, используя мангуста?
Я надеялся на что-то вроде:
PersonModel.find({ favoriteFoods : { $contains : "sushi" }, function(...) {...});
(Я знаю, что нет $contains
в mongodb, просто объясняю, что я ожидал найти, прежде чем знать решение)
favouriteFoods
:favouriteFoods:[{type:Schema.Types.ObjectId, ref:'Food'}]
PersonModel.find({ favouriteFoods.text: "sushi" }, ...); person = { name : String, favouriteFoods : [{text:String}] }
В
$contains
mongodb нет оператора.Вы можете использовать ответ от JohnnyHK, как это работает. Самая близкая аналогия к содержащемуся в Монго состоит в том
$in
, что при использовании этого ваш запрос будет выглядеть так:источник
$in
используется, когда у вас есть несколько значений запроса, и документ должен соответствовать одному из них. Для обратного (о чем этот вопрос), ответ JohnnyHK является правильным. Я собирался понизить голос, но я думаю, что этот ответ может быть полезным для других людей, которые попадают на эту страницу.PersonModel.find({favouriteFoods: {"$in": ["sushi", "hotdog"]}})
Я чувствую,
$all
что будет более подходящим в этой ситуации. Если вы ищете человека, который любит суши, вы делаете:Как вы можете захотеть отфильтровать ваш поиск, например, так:
$in
это как ИЛИ и$all
как И. Проверьте это: https://docs.mongodb.com/manual/reference/operator/query/all/источник
В случае, если массив содержит объекты, например, if
favouriteFoods
является массивом следующих объектов:Вы можете использовать следующий запрос:
источник
Если вам нужно найти документы, содержащие элементы NULL, внутри массива поддокументов, я нашел этот запрос, который работает довольно хорошо:
Этот запрос взят из этого поста: массив запросов MongoDb с нулевыми значениями
Это была отличная находка, и она работает намного лучше, чем моя первоначальная и неправильная версия (которая отлично работала только для массивов с одним элементом):
источник
Хотя согласитесь с find () наиболее эффективным в вашем случае использования. Тем не менее, существует $ match структуры агрегации, чтобы упростить запрос большого количества записей и генерировать небольшое количество результатов, которые имеют ценность для вас, особенно для группировки и создания новых файлов.
источник
Incase of lookup_food_array это массив.
Incase of lookup_food_array это строка.
источник
Для Loopback3 все приведенные примеры не работали для меня или так же быстро, как использование REST API. Но это помогло мне понять, какой именно ответ мне нужен.
{"where":{"arrayAttribute":{ "all" :[String]}}}
источник
Если вы хотите использовать что-то вроде оператора «Содержит» через javascript, вы всегда можете использовать регулярное выражение для этого ...
например. Скажем, вы хотите получить клиента, который имеет имя "Бартоломью"
источник
Я знаю, что эта тема старая, но для будущих людей, которые могут задаться тем же вопросом, можно сделать еще одно невероятно неэффективное решение:
Это позволяет избежать всех оптимизаций MongoDB, поэтому не используйте их в производственном коде.
источник