2014-07-01 3 views
-1

у меня есть этот кодMongoDB и агрегировать несколько элементов

> db.attributes.aggregate([{ $match: {"name.en-UK": "Size"} },{ $unwind : "$values" },{ $project: { "code" : "$values.code", "name" : "$values.name", "_id": "$values._id"} },{ $match: {"name.en-UK": "S"}}]) 
{ 
    "result" : [ 
     { 
      "_id" : ObjectId("53b2c644d901f244965f74e3"), 
      "code" : 0, 
      "name" : { 
       "en-UK" : "S" 
      } 
     }, 
     { 
      "_id" : ObjectId("53b2c644d901f244965f74e4"), 
      "code" : 1, 
      "name" : { 
       "en-UK" : "S" 
      } 
     } 
    ], 
    "ok" : 1 
} 

как я могу изменить его так, что он возвращает только «код» == 0 с «именем» == «ан-UK»: «S»

я попытался это:

> db.attributes.aggregate([{ '$match': {"name.en-UK": "Size"} }, 
... { '$unwind' : "$values" }, 
... { '$project': { "code" : "$values.code", "valueId": "$values._id"} }, 
... { '$match': { 
... $and: [ 
... {"name.en-UK": "S"}, 
... {"code": 0} 
... ] 
... } 
... }]) 
{ "result" : [ ], "ok" : 1 } 

но не работает!

и совет высоко ценится

+0

Не первый пост, где вы, кажется, анализа кода, который вы не понимаете и просят объяснений. Ответы довольно просты, если вы нашли время и поняли основы работы с MongoDB. Это ** Не ** помочь вам с контрактом, который вы приняли на службу. –

+0

Редактирование не помогает. Путь «name.en-UK» явно не соответствует данным для «Размер». Сначала сделайте чтение. –

ответ

0

, кажется, мне нужно добавить, что select, так { $project: { "code" : "$values.code", "name" : "$values.name", "_id": "$values._id"} } должно включать имя

> db.attributes.aggregate([{ '$match': {"name.en-UK": "Size"} }, { '$unwind' : "$values" }, { $project: { "code" : "$values.code", "name" : "$values.name", "_id": "$values._id"} }, { '$match': { $and: [ {"name.en-UK": "S"}, {"code": 0} ] } }]) 
{ 
    "result" : [ 
     { 
      "_id" : ObjectId("53b2c644d901f244965f74e3"), 
      "code" : 0, 
      "name" : { 
       "en-UK" : "S" 
      } 
     } 
    ], 
    "ok" : 1 
} 
Смежные вопросы