javascript - MongoDB:Meteor 中的 $addToSet 重复结果回调

标签 javascript mongodb meteor

那里有很多 $addToSet 主题,但经过一个小时的搜索后,我仍然不知道如何在 meteor-serverside-javascript-code 中评估 $addToSet 是否向数组添加了一个新元素或者它是一个重复匹配。

我找到的最接近的是 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})

并查看它是否返回一个对象或什么都不返回。然后根据需要进行更新。

关于javascript - MongoDB:Meteor 中的 $addToSet 重复结果回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28891876/

相关文章:

javascript - eval_in_page javascript 执行在 firefox 中有效,但在 phantomjs 中无效

javascript - Mongoose find() 使用锁存器在 for 循环内调用

java - 使用 Java 和 MongoDB 进行参数化查询

Meteor:如何在注册过程中为用户分配不同的角色

javascript - 如何保护 Firebase 数据库中用户和管理员的访问安全?

javascript - React 从 url 中提取参数

javascript - jQuery - 在其他地方访问序列化数据

MongoDB - @DBRef - 有没有办法控制非规范化属性?

javascript - 在 Meteor 中在客户端和服务器上生成相同的随机数

javascript - 如何重定向到外部 URL 并在 Meteor 中收集客户端数据