2013-08-14 2 views
1

Эй, как я могу запросить определенный элемент массива, принадлежащий коллекции друзей пользователя.Как запросить элемент массива, принадлежащий пользователю?

Вот запрос:

Friend.find({userId: req.signedCookies.userid, 'friendStatus.labels': req.body.searchLabels 
      }, function(err, users) { 

Эта разбивка является идент способ найти подписанный в документе пользователя, то я хочу, чтобы просто получить доступ метки внутри массива меток, который вложен в объекте что находится внутри массива friendStatus ...

вот пример документа:

> db.friends.find({'firstName': "test3"}).pretty() 
{ 
     "__v" : 0, 
     "_id" : ObjectId("520a4944c24d995410000008"), 
     "accepted_notifications" : true, 
     "added_notifications" : true, 
     "firstName" : "test3", 
     "firstNameTrue" : "test3", 
     "friendStatus" : [ 
       { 
         "favorites" : 1, 
         "fuId" : ObjectId("520a4905c24d995410000001"), 
         "labels" : [ 
           "new", 
           "old" 
         ], 
         "notes" : "He likes me", 
         "status" : 3 
       }, 
       { 
         "fuId" : ObjectId("520a4925c24d995410000004"), 
         "labels" : [ ], 
         "notes" : "sadwa", 
         "status" : 3 
       } 
     ], 
     "lastName" : "test3s", 
     "lastNameTrue" : "TEST3s", 
     "notifications" : 0, 
     "userId" : ObjectId("520a4944c24d995410000007") 
} 

и текущий запрос возвращает весь документ, когда я использую функцию обратного вызова пользователи, но я просто хочу, чтобы вытащить это из него для соответствующих меток:

{ 
          "favorites" : 1, 
          "fuId" : ObjectId("520a4905c24d995410000001"), 
          "labels" : [ 
            "new", 
            "old" 
          ], 
          "notes" : "He likes me", 
          "status" : 3 
        }, 

ответ

5

Вы можете использовать структуру агрегации для достижения этой цели, в частности, $match и $project операторов. $match соответствует документам, похожим на обычный запрос, и $project позволяет вам выбрать, какие поля возвращать в результате запроса. Агрегатные запросы для настройки могут выглядеть следующим образом:

Friend.aggregate([{$match: {userId: req.signedCookies.userid,'friendStatus.labels': req.body.searchLabels}}, {$project: {'friendStatus.labels': 1}}]) 

Дополнительная документацию можно найти здесь: http://docs.mongodb.org/manual/reference/aggregation/operators/

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