Leider gibt es derzeit keine Möglichkeit, genau das zu tun, was Sie beschrieben haben.
Als Chris Shain wies darauf hin, https://jira.mongodb.org/browse/SERVER-2191 - „$ push() an der Vorderseite der Array“ und ähnlich https://jira.mongodb.org/browse/SERVER-1824 - „Unterstützung für in bestimmten Array-Index einfügen“ würde helfen, aber diese Features, die derzeit für eine bestimmte Release-Version geplant .
Als eine mögliche Problemumgehung könnten Sie Ihrem Dokument ein Feld namens "lastElement" (oder gleichwertig) hinzufügen, das eine Kopie des letzten Elements enthält, das an das Array gesendet wird. In Ihrer update-Anweisung könnten Sie dann nach dem Wert "lastElement" abfragen, und wenn er übereinstimmt, setzen Sie ihn gleichzeitig auf den neuen Wert und drücken denselben Wert in einer einzigen atomaren Operation auf das Array.
Zum Beispiel:
> db.blogposts.save({_id:5, comments:[{by: "Abe", text:"First"}], lastElement:{by: "Abe", text:"First"}})
> db.blogposts.find().pretty()
{
"_id" : 5,
"comments" : [
{
"by" : "Abe",
"text" : "First"
}
],
"lastElement" : {
"by" : "Abe",
"text" : "First"
}
}
> db.blogposts.update({"lastElement.text":"First"}, {$set:{lastElement:{by: "Joe", text:"Second"}}, $push:{comments:{by: "Joe", text:"Second"}}})
> db.blogposts.find().pretty()
{
"_id" : 5,
"comments" : [
{
"by" : "Abe",
"text" : "First"
},
{
"by" : "Joe",
"text" : "Second"
}
],
"lastElement" : {
"by" : "Joe",
"text" : "Second"
}
}
>
Als Alternative können Sie die Strategie in der "Update, wenn Current" skizzierte betrachten Abschnitt der "Atomic-Operationen" Dokumentation: http://www.mongodb.org/display/DOCS/Atomic+Operations
Ich weiß, diese Arbeit ist - Umschläge und nicht ideale Lösungen. Hoffentlich hilft Ihnen das Obige, Ihr Ziel zu erreichen, oder zumindest einige Denkanstöße zu geben, damit Sie eine andere Lösung finden können. Wenn Sie dies tun, teilen Sie es bitte hier mit, damit alle Mitglieder der Community, die ähnliche Probleme haben, von Ihrer Erfahrung profitieren können. Vielen Dank.
eines Arrays an den Anfang drängen Sieht so aus, ist noch nicht implementiert: https: //jira.mongodb .org/browse/SERVER-2191? page = com.atlassian.jira.plugin.system.issuetabpanels% 3Aall-tabpanel –
Duplikate von [können Sie mongo $ push vorgeben statt anhängen?] (http://stackoverflow.com/questions/10131957/kann-du-hast-mongo-push-prepend-statt-append) –