2016-10-05 3 views
0

MongoDb, найти конкретные объекты, вложенные значения, соответствующие конкретные значения

db.Rooms.find({"name" : "room3"}).pretty() 
 
{ 
 
     "_id" : ObjectId("57f50608ace5ceb9af033528"), 
 
     "name" : "room3", 
 
     "userData" : { 
 
       "user" : ObjectId("57f4d142ace5ceb9af033521"), 
 
       "date" : "Wed Oct 05 2016 15:54:16 GMT+0200" 
 
     }, 
 
     "active" : true, 
 
     "users" : [ 
 
       { 
 
         "uid" : ObjectId("57f383a6ace5ceb9af033511") 
 
       }, 
 
       { 
 
         "uid" : ObjectId("57f4d142ace5ceb9af033521") 
 
       } 
 
     ], 
 
     "messages" : [ 
 
       { 
 
         "msg" : "first test since statement ", 
 
         "time" : "Wed Oct 05 2016 15:55:26 GMT+0200", 
 
         "user" : ObjectId("57f383a6ace5ceb9af033511") 
 
       }, 
 
       { 
 
         "msg" : "second test since statement ", 
 
         "time" : "Wed Oct 05 2016 15:57:35 GMT+0200", 
 
         "user" : ObjectId("57f4d142ace5ceb9af033521") 
 
       }, 
 
       { 
 
         "msg" : "third test since statement ", 
 
         "time" : "Wed Oct 05 2016 15:58:11 GMT+0200", 
 
         "user" : ObjectId("57f383a6ace5ceb9af033511") 
 
       } 
 
     ] 
 
}

Я совершенно новой для Монго, и я у меня возникают проблемы, решая это. на самом деле я попробовал сам по себе в течение половины дня Allready :(

Что я хочу, чтобы найти «только» сообщения, что некий пользователь вставил ..

Это моя коллекция.

(если это выглядит грязным, я буду указать ссылку на изображение, а) image as link

Что я хочу, чтобы показать: все «MSG» от «пользователя» с _id: ObjectId («57f383a6ace5ceb9af033511»)

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

ТНХ;)

+0

Не могли бы вы поделиться код, который вы пытались получить доступ к Сообщ? –

ответ

1

Похожие Заданный вопрос перед тем

How to filter array in subdocument with MongoDB

для вас вопрос, используя агрегатную функцию

db.Room.aggregate(
    { $unwind: '$messages'}, 
    { $match: {'messages.user': {$eq: ObjectId("57f383a6ace5ceb9af033511")}}}, 
    { $group: {_id: '$_id', list: {$push: '$messages.msg'}}} 

Результат:

{ 
    "_id" : ObjectId("57f50608ace5ceb9af033528"), 
    "list" : [ 
     "first test since statement ", 
     "third test since statement " 
    ] 
} 
+0

благодарю вас за ответ .. он сделал то, что я хотел :) вы спаситель времени: P –

0

Существует еще один вопрос по этой теме:

How to select a single field in MongoDB?

В методе поиска вы можете передать другой объект (кроме запроса), который сообщает, какие поля возвращаются.

Для вас это будет выглядеть примерно так:

db.student.find({"_id" : ObjectId("57f50608ace5ceb9af033528")}, {messages:1}) 

где 1 в {messages:1} = выберите поле "сообщения".

+0

спасибо .. я загляну в него :) –

Смежные вопросы