这不起作用,但希望这个以及满口的一个标题可以解决问题
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,因此它必须是可索引/唯一的。如果是更新,则createdAt不应更改。
更新,因此它在原始环境中有效,但我更倾向于使用正确答案的解决方案。
答案 0 :(得分:2)
我怀疑在最小化方面支持这一点,但是你总是可以在服务器上实现逻辑并发布方法。但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
尚未包含a created_at
字段,并且您想要的数据实际上是BSON“日期”类型而不是纪元时间戳(BSON日期实际存储为纪元时间戳内部无论如何)否则使用.valueOf()
进行转换,如示例所示。