2015-11-04 2 views
3

У меня есть коллекция членов со следующими данными:MongoDB: Как получить список подколлекции

db.member.insert(
{ 
    userName: "TanNM", 
    password: "xxx", 
    wantList: [{ 
     title: "Want 1.1 - HN", 
     description: "Want 1.1 description", 
     province:{ 
      name: "Ha Noi", 
      districtList:[ { name: "Ha Dong", qty: 25 }, { name: "Ba Dinh", qty: 50 } , { name: "Cau Giay", qty: 25 }, { name: "Hoan Kiem", qty: 50 } ] 
     } 
    }, { 
     title: "Want 1.2 - HN", 
     description: "Want 1.2 description", 
     province:{ 
      name: "SG", 
      districtList:[ { name: "Ha Dong", qty: 25 }, { name: "Ba Dinh", qty: 50 } , { name: "Cau Giay", qty: 25 }, { name: "Hoan Kiem", qty: 50 } ] 
     } 
    }], 
    stock: [ { size: "S", qty: 25 }, { size: "M", qty: 50 } ], 
    category: "clothing" 
}) 

db.member.insert(
{ 
    userName: "MinhNN", 
    password: "xxx", 
    wantList: [{ 
     title: "Want 2.1 - HN", 
     description: "Want 2.1 description", 
     province:{ 
      name: "Ha Noi", 
      districtList:[ { name: "Ha Dong", qty: 25 }, { name: "Ba Dinh", qty: 50 } , { name: "Cau Giay", qty: 25 }, { name: "Hoan Kiem", qty: 50 } ] 
     } 
    }, {title: "Want 2.2 - HN", 
     description: "Want 2.2 description", 
     province:{ 
      name: "Ha Noi", 
      districtList:[ { name: "Ha Dong", qty: 25 }, { name: "Ba Dinh", qty: 50 } , { name: "Cau Giay", qty: 25 }, { name: "Hoan Kiem", qty: 50 } ] 
     } 
    }], 
    stock: [ { size: "S", qty: 25 }, { size: "M", qty: 50 } ], 
    category: "clothing" 
}) 

db.member.insert(
{ 
    userName: "DungNP", 
    password: "xxx", 
    wantList: { 
     title: "Want 3 - SG", 
     description: "Want 3 description", 
     province:{ 
      name: "TP Ho Chi Minh", 
      districtList:[ { name: "Ha Dong", qty: 25 }, { name: "Ba Dinh", qty: 50 } , { name: "Cau Giay", qty: 25 }, { name: "Hoan Kiem", qty: 50 } ] 
     } 
    }, 
    stock: [ { size: "S", qty: 25 }, { size: "M", qty: 50 } ], 
    category: "clothing" 
}) 

членов имеет некоторые хотят (wantList), Want в провинции/районе.

Как получить все «хочу» (Не все документ) всех членов с province.name является «Ha Noi»

+1

Привет! Я удалил свой ответ, поскольку он не решает вашу проблему. Наконец, я понял, что для меня сейчас немного сложно. Когда у меня будет время, я попытаюсь немного разобраться в этом, но надеюсь, что кто-то ответит на ваш вопрос. :) Удачи! – Askar

+0

Спасибо большое! @Оскар. – Parabol

ответ

2

Я думаю, что ответ вы ищете это

db.member.find({"wantList.province.name": "Ha Noi"}); 

Если вы только нужно вывести «wantList», вы должны попробовать этот запрос,

db.member.find({"wantList.province.name": "Ha Noi"}, {"wantList": 1}); 

Это будет только выводить «wantList» массив, в котором одна из областей равен «Ханой». Надеюсь, это был ответ, который вы искали.

Второй запрос возвращает следующее:

{ "_id" : ObjectId("56568bbd2688b376a56878c5"), "wantList" : [ { "title" : "Want 1.1 - HN", "description" : "Want 1.1 description", "province" : { "name" : "Ha Noi", "districtList" : [ { "name" : "Ha Dong", "qty" : 25 }, { "name" : "Ba Dinh", "qty" : 50 }, { "name" : "Cau Giay", "qty" : 25 }, { "name" : "Hoan Kiem", "qty" : 50 } ] } }, { "title" : "Want 1.2 - HN", "description" : "Want 1.2 description", "province" : { "name" : "SG", "districtList" : [ { "name" : "Ha Dong", "qty" : 25 }, { "name" : "Ba Dinh", "qty" : 50 }, { "name" : "Cau Giay", "qty" : 25 }, { "name" : "Hoan Kiem", "qty" : 50 } ] } } ] } 

{ "_id" : ObjectId("56568bc72688b376a56878c6"), "wantList" : [ { "title" : "Want 2.1 - HN", "description" : "Want 2.1 description", "province" : { "name" : "Ha Noi", "districtList" : [ { "name" : "Ha Dong", "qty" : 25 }, { "name" : "Ba Dinh", "qty" : 50 }, { "name" : "Cau Giay", "qty" : 25 }, { "name" : "Hoan Kiem", "qty" : 50 } ] } }, { "title" : "Want 2.2 - HN", "description" : "Want 2.2 description", "province" : { "name" : "Ha Noi", "districtList" : [ { "name" : "Ha Dong", "qty" : 25 }, { "name" : "Ba Dinh", "qty" : 50 }, { "name" : "Cau Giay", "qty" : 25 }, { "name" : "Hoan Kiem", "qty" : 50 } ] } } ] } 

EDIT:

Я думаю, что вы ищете этот ответ:

db.member.find(
    {"wantList.province.name": "Ha Noi"}, 
    {"wantList": {"$elemMatch": {"province.name": "Ha Noi"}}} 
); 

Который возвращает:

{ "_id" : ObjectId("56568bbd2688b376a56878c5"), "wantList" : [ { "title" : "Want 1.1 - HN", "description" : "Want 1.1 description", "province" : { "name" : "Ha Noi", "districtList" : [ { "name" : "Ha Dong", "qty" : 25 }, { "name" : "Ba Dinh", "qty" : 50 }, { "name" : "Cau Giay", "qty" : 25 }, { "name" : "Hoan Kiem", "qty" : 50 } ] } } ] } 
{ "_id" : ObjectId("56568bc72688b376a56878c6"), "wantList" : [ { "title" : "Want 2.1 - HN", "description" : "Want 2.1 description", "province" : { "name" : "Ha Noi", "districtList" : [ { "name" : "Ha Dong", "qty" : 25 }, { "name" : "Ba Dinh", "qty" : 50 }, { "name" : "Cau Giay", "qty" : 25 }, { "name" : "Hoan Kiem", "qty" : 50 } ] } } ] } 

Если вы хотите повторно переместить _id вы просто ввести следующий запрос:

db.member.find(
    {"wantList.province.name": "Ha Noi"}, 
    {"wantList": {"$elemMatch": {"province.name": "Ha Noi"}}, "_id": 0} 
); 

EDIT 2:

Я думаю, что агрегация требуется, чтобы решить вашу проблему. Попробуйте этот запрос.

db.member.aggregate([ 
    {"$match": {"wantList.province.name": "Ha Noi"}}, 
    {"$unwind": "$wantList"}, 
    {"$match": {"wantList.province.name": "Ha Noi"}}, 
    {"$project": {"_id": 0, "wantList": 1}} 
]); 

Который возвращает:

{ "wantList" : { "title" : "Want 1.1 - HN", "description" : "Want 1.1 description", "province" : { "name" : "Ha Noi", "districtList" : [ { "name" : "Ha Dong", "qty" : 25 }, { "name" : "Ba Dinh", "qty" : 50 }, { "name" : "Cau Giay", "qty" : 25 }, { "name" : "Hoan Kiem", "qty" : 50 } ] } } } 
{ "wantList" : { "title" : "Want 2.1 - HN", "description" : "Want 2.1 description", "province" : { "name" : "Ha Noi", "districtList" : [ { "name" : "Ha Dong", "qty" : 25 }, { "name" : "Ba Dinh", "qty" : 50 }, { "name" : "Cau Giay", "qty" : 25 }, { "name" : "Hoan Kiem", "qty" : 50 } ] } } } 

{ "wantList" : { "title" : "Want 2.2 - HN", "description" : "Want 2.2 description", "province" : { "name" : "Ha Noi", "districtList" : [ { "name" : "Ha Dong", "qty" : 25 }, { "name" : "Ba Dinh", "qty" : 50 }, { "name" : "Cau Giay", "qty" : 25 }, { "name" : "Hoan Kiem", "qty" : 50 } ] } } } 

Я думаю, что это ответ, который вы ищете.

+0

Нет Я проверил его не отвечая на вопрос, подтвердили ли вы результат? – VedX

+0

Почему это не ответ. Последний запрос возвращает только список пожеланий, где название провинции - Ха-Ной. Не могли бы вы указать, почему это неправильный ответ? – suecarmol

+0

Возможно, я ошибаюсь, но, пожалуйста, добавьте результат этого запроса в ответ. – VedX

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