Используя $и с $match в mongodb
Я пытаюсь использовать следующий запрос в MongoDB, но он не работает.
db.test.aggergate(
$match: {$and: [type: {$in: ["TOYS"]}, type: {$nin: ["BARBIE"]}, time:
{$lt:ISODate("2013-12-09T00:00:00Z")}]}})
В нем говорится недопустимый символ ":".
Можно ли использовать $и $match? Я видел пример на этом форуме $или с $match, поэтому я предположил, что это возможно.
Заранее благодарим вас за помощь и рекомендации.
Ответы
Ответ 1
$и с $match работает нормально.
У вас есть синтаксические ошибки в вашем запросе. Попробуйте это.
db.test.aggregate([
{
$match: {
$and: [
{type: {$in: ["TOYS"]}},
{type: {$nin: ["BARBIE"]}},
{time: {$lt:ISODate("2013-12-09T00:00:00Z")}}
]
}
}
])
И для того, что вы пытаетесь сделать, вам не нужен $and
.
Ответ 2
Если кто-то хочет отказаться от моего ответа, это нормально, это типичный вопрос с отсутствием исследований
db.test.find( {$and: [ {"type": {$in: ["TOYS"]}},
{"type": {$nin: ["BARBIE"]}},
{"time": {$lt:ISODate("2013-12-09T00:00:00Z")}}
]
})
И работает с FIND, получает массив совпадений (но это не команда соответствия)
Агрегирующая структура предназначена для чего-то совершенно другого, как сказано в слове, для агрегирования (подсчета, суммы, avg и т.д., Чтобы группировать или разматывать и т.д.)
Ответ 3
{
$match: {
$or:[
{'sender':sender, 'recipient':recipient},
{'recipient':sender,'sender':recipient}
]
}
}
используя $или
Ответ 4
Ниже показано, как я делаю со многими $и вместе с $или
User.aggregate([
{
$lookup:{
from:'influencers',
localField:'_id',
foreignField:'user',
as:'influencer'
}
},
{ $match:{ '$and':
[ { '$and': [ { 'influencer.aboutMe.birthday': { '$lte': 2017-09-11T09:10:07.283Z } } ] },
{ '$and': [ { 'influencer.aboutMe.minPrice': { '$gte': 0 } } ] },
{ '$and':
[ { '$or':
[ { '$and': [ { 'influencer.followed_by': { '$gte': 0 } } ] },
{ '$and': [ { 'influencer.youTubeSubscribercount': { '$gte':
0 } } ] } ] } ] },
{ 'influencer.isAdminverified': true },
{ 'influencer.status': 'Verified' } ] } }
]);