Om dit atomair te doen, moeten al uw drie voorbeelddocumenten deel uitmaken van hetzelfde document. MongoDB voert alleen atomaire bewerkingen uit op eenvoudige documenten:http://www.mongodb.org/ display/DOCS/Atomic+Operations
Als ze deel uitmaken van een enkel document, zou het volgende de volgorde van het 2e en 3e subdocument veranderen:
> 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 } ] }
Vraag:
db.so.update( { _id: new ObjectId("4f55e7ba362e2f2a734c92f8")}, { $set : { 'subs.1.order' : 3, 'subs.2.order' : 2 } } );
Resultaat:
> 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 } ] }