$ 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})
并查看它是否返回对象或什么都不返回。然后根据需要进行更新。

10-06 11:58