MongoDB对集合的并行更新

MongoDB对集合的并行更新,mongodb,mongodb-query,Mongodb,Mongodb Query,我是MongoDB的新手,我有一个问题,比如说我有一个产品系列` { _id: 100, sku: "abc123", quantity: 250, instock: true, reorder: false, details: { model: "14Q2", make: "xyz" }, tags: [ "apparel", "clothing" ], ratings: [ { by: "ijk", rating: 4 } ] } ` 我想用不同线程中的两个

我是MongoDB的新手,我有一个问题,比如说我有一个产品系列`

{
  _id: 100,
  sku: "abc123",
  quantity: 250,
  instock: true,
  reorder: false,
  details: { model: "14Q2", make: "xyz" },
  tags: [ "apparel", "clothing" ],
  ratings: [ { by: "ijk", rating: 4 } ]
}
`

我想用不同线程中的两个update语句(Thread1)同时更新此产品集合`

db.products.update(
   { _id: 100 },
   { $set:
      {
        quantity: 500,
        details: { model: "14Q3"}
      }
   }
)

线程2,

db.products.update(
   { _id: 100 },
   { $set: { "details.make": "zzz" } }
)
`


由于这两个线程在同一个文档中同时发生,我们只想知道,不管它发生的顺序如何,输出都是
{“_id”:100,“sku”:“abc123”,“quantity”:500,“instock”:true,“reorder”:false,“details”:{“model”:“14Q3”,“make”:“zzz”},“tags”:[“apparel”,“count”],“ratings”:[{“by”:“ijk”,“rating”:4}]}
Mongo支持单个文档中的这种原子行为?

MongoDB中的单个文档更新是,但是由于您在“线程1”更新中没有使用点表示法,如果第二次更新,整个
详细信息
子文档将被覆盖到
{model:“14Q3”}

但是,如果将该更新更改为使用点表示法,则更新顺序与此无关:

db.products.update(
   { _id: 100 },
   { $set:
      {
        quantity: 500,
        "details.model": "14Q3"
      }
   }
)

很高兴知道这一点,非常感谢。