$ addToSet主题很多,但是经过一个小时的搜索,如果$ addToSet向数组中添加新元素还是重复匹配,我仍然不知道如何在 meteor 服务器端javascript代码中求值。
我找到的最接近的是How to check if Mongo's $addToSet was a duplicate or not,但是我不知道如何在 meteor 中获取db对象。
就像在其他帖子中所写的那样,作为更新方法的最后一个参数的回调函数始终返回1,并且始终成功,无论它是重复元素还是独特元素。
如果当前没有解决方案,我想知道是否还有其他方法可以检查特定元素的嵌套数组(在一个特定集合内)。一个简单的正确/错误结果信息就足够了。
编辑:
好的,我设法通过以下几行使批量更新现在开始工作:
var db = MongoInternals.defaultRemoteCollectionDriver().mongo.db;
var col = db.collection("posts");
var batch = col.initializeOrderedBulkOp();
batch.find({_id: postid}).upsert().updateOne({"$addToSet": ...});
batch.execute(function(err, result) {
if (err) throw err;
console.log("RESULT: ", JSON.stringify(result));
//db.close();
});</code>
$ addToSet可与此实现一起使用,但是从执行返回的
result
对象仍然始终相同:RESULT: {
"ok":1,
"writeErrors":[],
"writeConcernErrors":[],
"nInserted":0,
"nUpserted":0,
"nMatched":1,
"nModified":null,
"nRemoved":0,
"upserted":[]
}
有趣的值
nModified
保留null
进行更新和(重复发现)跳过。有任何想法吗?
最佳答案
如果我重新表述这个问题,那么您正在尝试确定您要插入的内容是否已经存在。
为什么不尝试在插入之前简单地查询对象呢?
如果你有一个集合(数组),你可以简单地做db.collection.find({array_key: object_to_find_in_array})
并查看它是否返回对象或什么都不返回。然后根据需要进行更新。