即使没有更新,Mongoose update $ setOnInsert也会更新updatedAt时间戳

时间:2017-09-22 12:16:35

标签: mongodb mongoose

我有一个timestamps: true参数的架构。我想插入文档但仅限于它们尚不存在。如果确实存在,则不应进行任何操作(noop)。

所以我使用$ setOnInsert参数,如下所示

return Order.findByIdAndUpdate(
        order._id,
        {
          $setOnInsert: order
        },
        {
          upsert: true,
          new: true
        });

如果我理解正确,那么只应该插入doc(如果它尚未存在),否则不执行更新。

但是,无论何时运行此操作,都会更新updatedAt时间戳。

我该怎样防止这种情况?这是预期的行为,还是我选择了“仅在不存在时插入”的错误方法?

1 个答案:

答案 0 :(得分:0)

import shutil client = SSHClient() client.load_system_host_keys() client.connect('user@address') # here's the important part: we're using the file handles returned by exec_command() update_stdin, update_stdout, update_stderr = client.exec_command('sudo update.sh') # copy stdout and stderr from the remote thread to our own process's stdout and stderr t_out = Thread(target=shutil.copyfileobj, args=[update_stdout, sys.stdout]); t_out.start() t_err = Thread(target=shutil.copyfileobj, args=[update_stderr, sys.stderr]); t_err.start() # write your local file to the remote stdin, in the foreground: we don't exit until done. shutil.copyfileobj(open('file.ext4.gz', 'r'), update_stdin) update_stdin.close() # optional, but let's be graceful: wait for the threads to exit, and collect exit status t_out.join(); t_err.join() result = stdout.channel.recv_exit_status() print(f"Remote process exited with status {result}") 接受一个findOneAndUpdate选项(当设置为timestamps时)可让您跳过更新时间戳。

例如:

true

您可以查看相关文档here