javascript - 基于 Meteor 中嵌套文档的自定义 ID 的条件更新插入

标签 javascript mongodb meteor mongodb-query

这不起作用,但希望这个和满口的标题能够传达要点

function addToDB(account_id)
{
    obj = {};
    if (!Accounts.findOne({account_id: account_id})) obj.createdAt = new Date().valueOf();
    obj.account_id = account_id;
    Accounts.upsert({account_id: account_id}, {$set: obj});
}

我需要使用 account_id 而不是 MongoDB 对象 id,因此它必须是可索引/唯一的。如果是更新,则 createAt 不应更改。

已更新,因此它可以在原始上下文中工作,但我更喜欢我评论的解决方案而不是正确的答案。

最佳答案

我怀疑 minimongo 方面是否支持这一点,但您始终可以在服务器上实现逻辑并发布方法。但 MongoDB 提供了 $setOnInsert运算符的目的是仅将该值应用于“upsert”实际上插入新文档时执行的更新:

Accounts.upsert(
    { "account_id": obj.account_id }, 
    { 
        "$setOnInsert": { "created_at": new Date() },
        "$set": obj // account_id would be automatically added but it doesn't matter
    }

);

当然假设 obj 尚未包含 created_at 字段,并且您想要的数据实际上是 BSON“Date”类型而不是纪元时间戳( BSON Dates实际上无论如何都会在内部存储为纪元时间戳)否则使用 .valueOf() 进行转换,如示例中所示。

关于javascript - 基于 Meteor 中嵌套文档的自定义 ID 的条件更新插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25817093/

相关文章:

javascript - 如何使js脚本全局可用?

mongodb - 检查字段是否存在于数组的子文档中

javascript - 在 htmlWidgets 的 onRender() 中修改选定点的有效方法

javascript - javascript可以在客户端捕获图像下载时间吗?

node.js - Mongodb findOne 与或

javascript - 尝试了解如何在js中使用Promise

angularjs - 错误: key $$hashKey must not start with '$' (AngularJS)

javascript - 强制 Meteor 更新远程更改?

javascript - meteor 错误 : A method named insert is already defined

javascript - 从 React 中的异步调用批量状态更新的最佳方法是什么?