2016-05-05 4 views
-1

Как я могу получить каждый идентификатор продукта в корзине из-под документа в mongodb.Как получить значение поля поддокумента из массива

{ 
    "_id": ObjectId("572992d6fc8b7a5c613248f6"), 
    "userId": "0001", 
    "fname": "Ankur", 
    "lname": "Vishnoi", 
    "address1": "Palam", 
    "city": "New Delhi", 
    "state": "Delhi", 
    "pin": 110077, 
    "cart": [ 
     { 
      "productId": 8, 
      "cartQty": 1 
     }, 
     { 
      "productId": 2, 
      "cartQty": 3 
     }, 
    ] 
} 

ответ

1

Вы можете использовать функцию Mongo Aggregate для $ разматывать элементы массива. Затем примените $ project для получения productId.

db.coll.aggregate([ 
    {$unwind : "$cart"}, 
    {$project : { _id : 0, "productId" : "$cart.productId"}} 
]) 

Результат:

{ "productId" : 8 } 
{ "productId" : 2 } 
0

Вы должны де-нормализовать свои документы с помощью оператора в $unwind трубопровода, если вы не должны. Лучший способ сделать это - использовать оператор $map.

db.carts.aggregate([ 
    { "$project": { 
     "productId": { 
      "$map": { 
       "input": "$cart", 
       "as": "crt", 
       "in": "$$crt.productId" 
      } 
     } 
    }} 
]) 
Смежные вопросы