这不起作用,但希望这个和满口的标题能够传达要点
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/