Node.js 在Mongoose中向上插入子文档
我正在尝试向文档中连续添加子文档。目标是每个子文档在数组中只显示一次。如果它存在,它应该被更新。我认为这就是所谓的“向上插入” 示例模式Node.js 在Mongoose中向上插入子文档,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我正在尝试向文档中连续添加子文档。目标是每个子文档在数组中只显示一次。如果它存在,它应该被更新。我认为这就是所谓的“向上插入” 示例模式 var playlyschema=mongoose.Schema({ 名称:String, 轨道:[ { 名称:String, 艺术家:弦 }] }); 查询 var query={'name':'playlay1'}, update1={$push':{'tracks':{'name':'First Track','artist':'artist'}},
var playlyschema=mongoose.Schema({
名称:String,
轨道:[
{
名称:String,
艺术家:弦
}]
});
查询
var query={'name':'playlay1'},
update1={$push':{'tracks':{'name':'First Track','artist':'artist'}},
update2={$push':{'tracks':{'name':'First Track','artist':'new artist'}},
update3={$push':{'tracks':{'name':'Second Track','artist':'artist'}},
选项={upsert:true};
findOneAndUpdate(查询、更新1、选项、函数(err、playlist){});
findOneAndUpdate(查询、更新2、选项、函数(err、playlist){});
findOneAndUpdate(查询、更新3、选项、函数(err、playlist){});
我得到了什么
“名称”:“播放列表1”,
“曲目”:[{“姓名”:“第一首曲目”,“艺术家”:“艺术家”},
{“姓名”:“第一首曲目”,“艺术家”:“新艺术家”},
{“姓名”:“第二首曲目”,“艺术家”:“艺术家”}]
我的目标是什么
“名称”:“播放列表1”,
“曲目”:[{“姓名”:“第一首曲目”,“艺术家”:“新艺术家”},
{“姓名”:“第二首曲目”,“艺术家”:“艺术家”}]
可能我必须查询特定的子文档,但我不知道如何查询。如果知道已添加轨迹,则可以使用位置更新来更新数组中的元素 例如:
db.playlists.update(
{'name': 'Playlist1', 'tracks.name': 'First Track'},
{'$set': { 'tracks.$.artist': 'new artist'}}
);
这将找到“playli1”,并能够确定它在曲目数组中与“First Track”匹配的位置,并将其存储在“$”操作符中。然后,当您更新$set中的艺术家时,它将用新的变量覆盖该变量
这可能不是您所寻找的确切解决方案,但希望它能为您指明正确的方向。将$push替换为$addToSet后,它将按预期工作
var query = {'name': 'Playlist1'},
update1 = {'$addToSet': { 'tracks': {'name' : 'First Track', 'artist': 'artist'}}},
options = {};
playlistSchema.findOneAndUpdate(query, update1, options, function (err, playlist) {});
如果Upsert与查询参数匹配,它将执行更新;如果它与任何内容都不匹配,它将执行插入。请参见此处(ctrl-f表示向上插入):