これをアトミックに行うには、3つのサンプルドキュメントすべてが同じドキュメントの一部である必要があります。 MongoDBは、単純なドキュメントに対してのみアトミックに操作を行います: https://www.mongodb.org/ display / DOCS / Atomic + Operations
それらが単一のドキュメントの一部である場合、以下は2番目と3番目のサブドキュメントの順序を変更します。
> db.so.find().pretty();
{
"_id" : ObjectId("4f55e7ba362e2f2a734c92f8"),
"subs" : [
{
"author_id" : "a",
"class" : "principle",
"content_id" : null,
"host_id" : null,
"modified_date" : 1330935540,
"order" : 1,
"pub_date" : 1330935540,
"score" : 0,
"text" : "Hello World!",
"vote_down_count" : 0,
"vote_up_count" : 0
},
{
"author_id" : "a",
"class" : "principle",
"content_id" : null,
"host_id" : null,
"modified_date" : 1330935538,
"order" : 2,
"pub_date" : 1330935538,
"score" : 0,
"text" : "Nice to meet you.",
"vote_down_count" : 0,
"vote_up_count" : 0
},
{
"author_id" : "a",
"class" : "principle",
"content_id" : null,
"host_id" : null,
"modified_date" : 1330935548,
"order" : 3,
"pub_date" : 1330935548,
"score" : 0,
"text" : "Great!",
"vote_down_count" : 0,
"vote_up_count" : 0
}
]
}
クエリ:
db.so.update(
{ _id: new ObjectId("4f55e7ba362e2f2a734c92f8")},
{ $set : { 'subs.1.order' : 3, 'subs.2.order' : 2 } }
);
結果:
> db.so.find().pretty();
{
"_id" : ObjectId("4f55e7ba362e2f2a734c92f8"),
"subs" : [
{
"author_id" : "a",
"class" : "principle",
"content_id" : null,
"host_id" : null,
"modified_date" : 1330935540,
"order" : 1,
"pub_date" : 1330935540,
"score" : 0,
"text" : "Hello World!",
"vote_down_count" : 0,
"vote_up_count" : 0
},
{
"author_id" : "a",
"class" : "principle",
"content_id" : null,
"host_id" : null,
"modified_date" : 1330935538,
"order" : 3,
"pub_date" : 1330935538,
"score" : 0,
"text" : "Nice to meet you.",
"vote_down_count" : 0,
"vote_up_count" : 0
},
{
"author_id" : "a",
"class" : "principle",
"content_id" : null,
"host_id" : null,
"modified_date" : 1330935548,
"order" : 2,
"pub_date" : 1330935548,
"score" : 0,
"text" : "Great!",
"vote_down_count" : 0,
"vote_up_count" : 0
}
]
}