好吧,在mapReduce之后,我们遇到了这种情况,我们有一系列要向上插入DB的结果。据我所知upsert创建新文档,如果它不存在,upsert标准是
{ productId: ObjectId(), date: ISODate() }
我要更新
results.forEach(r => {
await db.collection(collectionName).update(query, update, { upsert: true });
});
我期望的是每个productId和日期只有1个文档,但是每天很少(比如说大约4个)具有相同productId和日期的文档。就像在同一时间执行了很少的第一次迭代,并同时检查了这种文档是否存在,否则将创建一个。
在此先感谢您的帮助。
答案 0 :(得分:0)
在MongoDB上的Upsert操作为not atomic。这里from="0 75 55" to="360 75 55"
不会按顺序进行操作,因为<svg width="500" height="300">
<defs>
<g id="myGroup">
<polygon points="50,5 100,5 125,30 125,80 100,105
50,105 25,80 25, 30"
style="stroke:#747373; fill:#cc3333; stroke-width: 3;"/>
<text x=40 y=65 font-family="san-serif"
font-size="30px" fill="white">
STOP
</text>
</g>
</defs>
<use xlink:href="#myGroup"
transform="translate(0,0)"></use>
<use xlink:href="#myGroup"
transform="translate(250, -20) rotate(90)"></use>
<use xlink:href="#myGroup"
transform="translate(150, 220) rotate(180)"></use>
<g transform="translate(120,110)">
<use xlink:href="#myGroup">
<animateTransform attributeName="transform"
type="rotate"
from="0 75 55"
to="360 75 55"
begin="0s"
dur="1s"
repeatCount="indefinite"
/>
</use>
</g>
</svg>
不会在诺言时等待其回调完成。
您可以使用普通的for循环来顺序执行操作(尽管我不知道forEach
变量在这里的用途)
r
这样操作将一个接一个地完成。