За да направите това атомарно, всичките ви три примерни документа трябва да са част от един и същ документ. MongoDB извършва операции само атомно върху прости документи:http://www.mongodb.org/ display/DOCS/Atomic+Operations
Ако са част от един документ, следното ще промени реда на втория и третия поддокумент:
> 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" :"Радвам се да се запознаем.", "vote_down_count" :0, "vote_up_count" :0 }, { "author_id" :"a", "class" :"принцип", "content_id":null, "host_id":null, "modified_date" :1330935548, "order" :3, "pub_date" :1330935548, "score" :0, "text" :"Страхотно!", "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" :"Радвам се да се запознаем.", "vote_down_count" :0, "vote_up_count" :0 }, { "author_id" :"a", "class" :"принцип", "content_id":null, "host_id":null, "modified_date" :1330935548, "order" :2, "pub_date" :1330935548, "score" :0, "text" :"Страхотно!", "vote_down_count" :0, "vote_up_count" :0 } ]}