这是要查看的主要代码
function update(feed){
//.. do set up
var target = feed.title;
var value = {index: feed.value};
var query = { test: target, 'array.index': {$ne: value.index} },
update = { $push : {"array" : value} },
options = { upsert: true, new: true };
Model.findOneAndUpdate(query, update, options, function(err, docs) {
if(err) throw err;
console.log(docs);
}
);}
(我将代码修改为一般代码。如果您需要特定代码,请让我更新此帖子)
我正在尝试使用 upsert执行 Model.findOneandUpdate :true 。
我的代码在发出特定事件时执行
feedparser.on('readable', function() {
update(this.read());
});
在' array.index':{$ ne:value.index} 查询中,代码在首次执行后创建新的。
因此,
db.collection.find()
返回具有不同ObjectId的相同属性的多个文档 例如,
{" _id":ObjectId(" 1"),test:" A",array:[{index:" 1" }]}
{" _id":ObjectId(" 2"),test:" A",array:[{index:" 1"}]}
我想成为代码
更新
我也尝试通过
var doc = Model.findOne({ test: target });
if(doc != null){
var query = { _id: doc._id, 'array.index': {$ne: value.index} };
var update = { $push : {"array" : value} };
var options = {new: true};
Model.update(query, update, options, function(err, d){
if(err) throw err;
console.log(d);
});
}else{
doc = {
test: target,
array:[value]
};
Model.create(doc, function (err, res){
if(err) throw err;
console.log(res);
});
}
此代码导致无效。
更新
Model.findOne({ test:target }, function(err, doc){
if(doc === null){
doc = {
test: target
arrays:[value]
};
Animation.create(doc, {new: true}, function (err, res){
if(err) throw err;
console.log(res);
});
}else{
var query = { _id: doc._id, 'arrays.index': {$ne: value.index} };
var update = { $push : {"arrays" : value} };
var options = {new: true};
Animation.update(query, update, options, function(err, res){
if(err) throw err;
console.log(res);
});
}
});
但是,它会根据每个不同的索引值创建新的文档。
更新
var query = { test: target, 'array:index': {$ne: value.index} };
var update = { $push : {'array' : value}};
var options = {new: true};
Model.findOneAndUpdate(query, update, options, function(err, doc){
if(err) throw err;
if(doc === null){
doc = new Model({
test: target,
array:[value]
});
doc.save();
}
});
它也不起作用......
答案 0 :(得分:0)
我找到了如何解决这个问题! 首先,问题出现的原因是我试图用 $ ne 做 upsert 。 这是我的代码,
Animation.findOne({ title: AnimationTitle, team: TeamName }, function(err, result){
if(err) { throw err; }
if(result){
Animation.findOneAndUpdate({ title: AnimationTitle, team: TeamName, 'episodes.number': {$ne: episode.number} }, { $addToSet : {'episodes' : episode}}, {new: true}, function(err, result){
if(err) { throw err; }
});
}else{
Animation.findOneAndUpdate({ title: AnimationTitle, team: TeamName }, { $addToSet : {'episodes' : episode}}, {new: true, upsert: true}, function(err, result){
if(err) { throw err; }
});
}
});