Aby zrobić to atomowo, wszystkie trzy przykładowe dokumenty muszą być częścią tego samego dokumentu. MongoDB wykonuje operacje tylko na prostych dokumentach:http://www.mongodb.org/ wyświetlacz/DOCS/Atomowy+Operacje
Jeśli są one częścią jednego dokumentu, następujące zmiany zmienią kolejność drugiego i trzeciego poddokumentu:
> 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 } ] }
Zapytanie:
db.so.update( { _id: new ObjectId("4f55e7ba362e2f2a734c92f8")}, { $set : { 'subs.1.order' : 3, 'subs.2.order' : 2 } } );
Wynik:
> 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 } ] }