Оператор $ match для поля вложенного документа в MongoDb - PullRequest
3 голосов
/ 29 декабря 2011

Я пытаюсь выполнить новый конвейерный запрос MongoDB, поэтому я пытаюсь выполнить следующий запрос.

{
aggregate: 'Posts',
pipeline: [
    { $unwind: '$Comments'},
    { $match: {'$Comments.Owner': 'Harry' }},
    {$group: {
        '_id': '$Comments._id'
        }
     }
   ]
}

И ничего не соответствует запросу, поэтому возвращается пустой результат. Я думаю, проблема может быть в команде $ match. Я использую пунктирную запись соответствия комментария владельца, но не уверен, что это правда или нет. Почему этот запрос не возвращает Ownders, который является «Гарри». Я уверен, что он существует в БД.

Ответы [ 2 ]

10 голосов
/ 05 декабря 2012

Вы не используете префикс $ для имен полей $match.

Попробуйте это:

{
  aggregate: 'Posts',
  pipeline: [
    { $unwind: '$Comments'},
    { $match: {'Comments.Owner': 'Harry' }},
    { $group: {
      '_id': '$Comments._id'
    }}
  ]
}
0 голосов
/ 05 декабря 2012

Я сталкиваюсь с той же проблемой с платформой агрегации с MongoDB 2.2.

$match у меня не работает для поддокумента (но я просто изучаю MongoDB, поэтому могу что-то сделать не так).

Я добавил дополнительный прогноз для удаления поддокумента (Comments в данном случае):

{
aggregate: 'Posts',
pipeline: [
    { $unwind: '$Comments'},
    { $project: {
      comment_id: "$Comments._id",
      comment_owner: "$Comments.Owner"
    }},
    { $match: {'$comment_Owner': 'Harry' }},
    {$group: {
        '_id': '$comment_id'
        }
     }
   ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...