Как получить один документ вместо нескольких с одним именем nodejs mongodb - PullRequest
0 голосов
/ 19 сентября 2018

Я работаю над nodejs mongodb RESTful API. У меня есть 10 объектных документов (работы, которые может выполнять электрик) с тем же именем категории (электрик). Мне нужно получить это имя категории только в одном объекте один раз, но когда я запрашиваютогда все 10 документов отображаются только с именем категории. как я могу получить только один объект вместо 10 с тем же именем категории.

Есть 10 объектов, как указано ниже, с тем же именем категории.

{ "category": [ { "_id": "5b80393f7fca491488980fe1", "category_name": "electrical", "sub_category_name": "switches meters and fuses", "price": 300 }] }

Но когда я запрашиваю, я получаю

{"category": [ { "_id": "5b80393f7fca491488980fe1", "category_name": "electrical" },{ "_id": "5b80393f7fca491488980fe1", "category_name": "electrical" }] }

1 Ответ

0 голосов
/ 20 сентября 2018

Если я правильно понимаю ваш ожидаемый результат, вы можете использовать aggregate вместо вашего find, чтобы делать то, что вы хотите.

$match принимает запрос [ 1 ]:

{ $match: { "category.category_name": 'electrical' }},

$unwind сгладит категория массив [ 2 ]:

{ $unwind: '$category' }

$group позволяет нам группировать по category_name и делатьмассив из отдельных документов в каждой группе [ 3 ]:

{ 
    $group: { 
        _id: { category_name: '$category.category_name' },
       category: {
            $push: {
                _id: '$category._id',
                sub_category_name: '$category.sub_category_name',
                price: '$category.price'
            }
       }
    }
}

$project, чтобы получить category_name из _id [ 4 ]:

{ 
    $project: {
        _id: 0,
        category_name: '$_id.category_name',
        category: '$category'
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...