Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 从save()返回后,mongoose是否覆盖文档的本地更改?_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js 从save()返回后,mongoose是否覆盖文档的本地更改?

Node.js 从save()返回后,mongoose是否覆盖文档的本地更改?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,假设我有一个猫鼬文档a,看起来像: {field_1: 0, field_2: 0} {field_1: 1, field_2: 1} 然后我写: a.field_1 = 1; a.save() 稍后,在保存操作实际完成之前,我们有: a.field_2 = 1: a.save() 我对字段2所做的更改是否持续?我希望a的返回文档在两个文档都保存后看起来像: {field_1: 0, field_2: 0} {field_1: 1, field_2: 1} 我已经在我的机器上试过了,

假设我有一个猫鼬文档
a
,看起来像:

{field_1: 0, field_2: 0}
{field_1: 1, field_2: 1}
然后我写:

a.field_1 = 1;
a.save()
稍后,在保存操作实际完成之前,我们有:

a.field_2 = 1:
a.save()
我对
字段2
所做的更改是否持续?我希望
a
的返回文档在两个文档都保存后看起来像:

{field_1: 0, field_2: 0}
{field_1: 1, field_2: 1}
我已经在我的机器上试过了,我确实得到了我想要的结果。但我担心这可能只是运气,我可能(不太可能)得到:

因为在调用第二次保存之前,从初始保存返回的文档将我的
字段2
的值覆盖回零

有谁能证实第二个案例是不可能的,也许能说明猫鼬是如何处理这个问题的

谢谢

也许能让我们了解猫鼬是如何处理这个问题的

Mongoose如何在内部处理
.save()
,本节未作解释。但是看一下,似乎相同的对象一直在使用,直到某个时刻(在对MongoDB本机驱动程序的调用完成之前),因为Javascript对象作为引用传递,所以第一次调用可能会使用更新的对象

但是我们这里讲的是异步操作,一旦信息被发送到MongoDB,在得到响应之前,我们不知道会发生什么。我认为我们永远不应该依赖这样的异步操作,您应该始终等待
.save()
完成后调用回调,然后再执行第二个回调

有谁能证实第二个案例是不可能的

所以回答这个问题,我认为第二种情况是可能的。出于某种原因,对MongoDB的第一次调用(在对象更新之前)可能在第二次调用之后完成

在您的本地机器中,通常将按照您称之为的相同顺序进行。但是,根据环境的不同,它不能以相同的顺序执行,原因有很多