我有一个timestamps: true
参数的架构。我想插入文档但仅限于它们尚不存在。如果确实存在,则不应进行任何操作(noop)。
所以我使用$ setOnInsert参数,如下所示
return Order.findByIdAndUpdate(
order._id,
{
$setOnInsert: order
},
{
upsert: true,
new: true
});
如果我理解正确,那么只应该插入doc(如果它尚未存在),否则不执行更新。
但是,无论何时运行此操作,都会更新updatedAt时间戳。
我该怎样防止这种情况?这是预期的行为,还是我选择了“仅在不存在时插入”的错误方法?
答案 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。