Как проверить определенное значение в определенном поле документа и использовать его в синтаксисе mongodb

#node.js #mongodb

Вопрос:

Это мои документы, как показано ниже:

 {
    "user" : "test",
    "email" : "test@test.com",
    "song" : [
            {
                    "song" : "Torn Between Two Lovers",
                    "artist" : "Mary MacGregor",
                    "insertDate" : ISODate("2021-07-16T02:42:30.191Z")
            },
            {
                            "song" : "Theme from A Summer Place",
                            "artist" : "Percy Faith",
                            "insertDate" : ISODate("2021-07-16T02:43:08.052Z")
                    }
            ],
    "user" : "test2",
    "email" : "test2@test.com",
    "song" : [
            {
                    "song" : "Rock with you",
                    "artist" : "Michael Jackson",
                    "insertDate" : ISODate("2021-07-16T02:42:30.191Z")
            }  
            ]
}
 

Когда я получил электронное письмо с песней , как проверить, существует ли песня в массиве песен.
Если он существует, удалите его.
Если не существует, вставьте его.

Я использую код,как показано ниже, нахожу все песни пользователя-тестирую и регистрируюсь node.js синтаксис.

Как я могу работать с синтаксисом mongodb напрямую? Спасибо!!

 let query = {{"user": "test"},{song:1}};
db.collection("user").findOne(query, (err, result)
 

Ответ №1:

В таком случае вам придется использовать два запроса.

    let result = await db1.find({ email: "test@test.com" }).toArray();
var song = result[0].song ? result[0].song : [];
let index = song.findIndex(x => x.song === data.song)
if (index >= 0)
    song = song.filter(x => x.song !== data.song);
else
    song.push(data)
let result1 = await db1.findOneAndUpdate({ email: "test@test.com" }, { $set: { song: song } });