Запросить весь поддокумент в MongoDB

0

У меня есть такой документ:

  {
     author: "ABC1",
     text:"this is a Post",
     details: {
        time: "14/05/2015",
        Edit: "none"
     },
     comments: [
         { 
               comment_text: "Hello",
                user: "alan",
                  time:"20/05/2014 20:44" 
           }, 
         { 
                comment_text: "Hi Every One",
                 user: "bob",
                  time:"20/05/2014 20:44"
          },
         { 
                 comment_text: "Good morning , Alan", 
                 user: "Alan",
                 time:"20/05/2014 20:44"
           },
         { 
                    comment_text: "I'm bob",
                    user: "bob", 
                    time:"20/05/2014 20:44"
            },
              ],
     category: "IT"
   }

Я хочу Запросить весь субдокумент, у которого есть пользователь: "bob" Пример в PHP: db.posts.find(array ("comments.user" => "bob");

Я знаю, что этот синтаксис не будет работать для меня. И если синтаксис верен, операции поиска будут отображаться как:

                { 
                   comment_text: "I'm bob",
                   user: "bob", 
                   time:"20/05/2014 20:44" 
                },
                { 
                  comment_text: "Hi Every One",
                   user: "bob",
                  time:"20/05/2014 20:44" 
                },

Как я могу изменить схему документа для этого?

  • 0
    что именно вы хотите найти comments.user = 'bob'? и показывает только данные пользователя bob я думаю, что это должно быть решено с помощью агрегации.
Теги:

1 ответ

2

Yo не нужно менять схему документа, вы можете найти комментарии от Боба с агрегацией:

db.posts.aggregate([{$unwind:"$comments"},{$project:{"comment_text":"$comments.comment_text","user":"$comments.user","time":"$details.time",_id:0}},{$match:{"user":"bob"}}])
  • 0
    Я бы также предложил поставить начальный $match для user : "bob" . Это в конечном итоге избыточно, но установка начального соответствия позволит вам использовать индекс и сократить количество документов, которые должны быть обработаны остальной частью конвейера.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню