#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 } });