MongoDB Список поддокументов - PullRequest
1 голос
/ 21 апреля 2020

У меня вопрос по субдокументам. Допустим, у меня есть пользовательская база данных, подобная этой:

db.users.insertMany([
{
    username: "test",
    projectA: [
        {
            tags: ['1234', '23454']
        }

    ]
},

{
    username: "test2",
    projectA: [
        {
            tags: ['1dfdfsdf', '234dfdfdf54']
        }

    ]
},
]);

Под пользовательским документом у меня есть поддокументы с проектами. Допустим, что один из проектов называется «ProjectA». И под этим документом я храню данные проекта, в моем примере некоторые теги.

Я не использую всю пользовательскую модель, потому что это может быть много данных. Мне нужен список со всеми тегами в базе данных под пользователем и проектом A.

Я использую NodeJS с mon goose для получения данных. Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Вы можете использовать $match для фильтрации и $project для получения подмножества данных:

db.collection.aggregate([
    { $match: { username: "test" } },
    { $project: {"projectA.tags": 1} }
])

Пн go Детская площадка

0 голосов
/ 21 апреля 2020

MongoDB и Mon goose не имеют встроенной функциональности именно для того, что вы хотите. После запроса к базе данных вам придется написать собственный код в l oop через массив возвращаемых документов.

Примерно так:


db.collection.find({})
.lean()
.sort({data:1})
.limit(10)
.then(data=>{

//Process your data here using custom codes

for (let index = 0; index < data.length; index++) {
    const element = array[index].ProjectA.tags;
    console.log(element);
    }
})

.catch(err=>console.log(err));

Здесь я предполагаю, что проект filed всегда будет называться ProjectA для, а тег filed всегда будет называться tags.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...