2

我在 node.js 中使用 MongoDB

我想要的是在集合中插入文档。该文档有一个唯一的 ID,一个 lastAccess 字段,它存储上次访问的日期,以及一个 timesAccessed 字段,在创建文档时应该设置为 0,如果更新则增加 1。

我试过了:

// coll is a valid collection
coll.update(
    {user: accountInfo.uid},
    {user: accountInfo.uid,
     lastAccess: new Date(),
     $inc: {timesAccessed: 1},
     $setOnInsert: {timesAccessed: 0}
    },
    {upsert: true, w: 1},
    function(err, result) {
        if (err) throw err;
        console.log("Record upserted as " + result);
    });

但节点说:

MongoError: Modifiers and non-modifiers cannot be mixed

执行此操作的简洁且安全的方法是什么?

4

1 回答 1

5

您应该 $set 值或更新/替换整个对象。所以要么update(find_query, completely_new_object_without_modifiers, ...)update(find_query, object_with_modifiers, ...)

另外,你不能 $set 和 $setOnInsert 具有相同的字段名称,所以你将从 1 开始计数 :) 哦,你不需要将 find_query 项目添加到 update_query,它们会自动添加。

尝试:

col1.update( {
  user: accountInfo.uid
}, {
  $set: {
    lastAccess: new Date()
  }
  $inc: {
    timesAccessed: 1
  }
}, {
  upsert: true,
  w: 1
}, function(err, result) {
  if(err) {
    throw err;
  }
  console.log("Record upsert as", result);
});
于 2013-08-02T15:06:07.093 回答