mon goose findOne, как мне найти элемент из массива объекта? - PullRequest
0 голосов
/ 11 января 2020

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

Пример данных модели :

user: {
    _id: 1,
    profilePictures: [
        {
            id: 1,
            image: 'sample.png'
        },

        {
            id: 2,
            image: null
        },

        {
            id: 3,
            image: null
        }
    ]
}

My Mon goose .find query :

const user = await userModel.findOne({
                                    _id: 1,

                                    profilePictures: {
                                        $elemMatch: {
                                            $and: [
                                                { id: 2, image: null },
                                                { id: 3, image: null }
                                            ]
                                        } 
                                    }
                                })

но он ничего не возвращает, я знаю, что могу просто получить пользователя и использовать Array.some () для profilePictures или какую-либо другую функцию Array, чтобы проверить, если элемент массива с позициями 2 и 3 также имеет свойство image со значением null

, но так как я изучаю Mon goose, я пытаюсь найти способ сделать это таким образом.

Ответы [ 2 ]

0 голосов
/ 12 января 2020

Итак, я нашел решение, которое не использует сложный запрос mon goose. Я только что подтвердил это, используя JavaScript.

// req.body.id is an array of number

const user: any = await db.getCollection('somecollection').findOne({ _id: 1 })

let isAllPositionAvailable = true

for (const position of req.body.id) {
    isAllPositionAvailable = user.profilePictures.find((x: any) => x.id === parseInt(position)).image === null

    if (!isAllPositionAvailable) break
}

if (!isAllPositionAvailable) {
     return res.status(400).send({
          message: 'Image position is not available, please remove the existing image first'
     })
}
0 голосов
/ 11 января 2020

Предполагая, что вам нужно найти документ для определенных индексов, а массив всего один уровень, вы можете использовать этот простой запрос

db.getCollection('somecollection').find({ "_id": 1, "profilePictures.1.image": null, "profilePictures.2.image": null })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...