mongodb push-array
Habe ich das folgende schema. Ich bin mit node.js mit mongodb
attributes: {
type: { type: 'string' },
title: { type:'string' },
description: { type:'string' },
is_active: { type:'boolean',defaultsTo:true },
createdBy: { type:'json' },
attachments:{ type:'array' }
}
arr = [{
'id':attResult.id,
'subtype':type,
'title' : attResult.title,
'body' : attResult.body,
'filetype' : attResult.filetype
}];
Ich bin versucht, eine Anlage in das "Anlagen" - array, das einzigartig sein wird, um das Dokument.
Dies ist meine Abfrage.
books.update(
{ id: refid },
{ $push: { attachments: arr } }
).done(function (err, updElem) {
console.log("updElem" + JSON.stringify(updElem));
});
Was ist das problem in meiner Abfrage,kein Fehler aber nicht aktualisiert Anhänge.
Möchte ich mein Ergebnis ist dies:
{
"_id" : 5,
"attachments": [
{
"id": "xxxxxxx",
"subtype": "book",
"title": "xxxx",
"body": "xxxx" ,
"filetype" : "xxxxx"
},
{
"id": "xxxxxxx",
"subtype": "book",
"title": "xxxx",
"body": "xxxx",
"filetype": "xxxxx"
}
]
}
- Was sind Sie wirklich hier? Mungo vielleicht? Meinst du "Attribute", um Ihre schema-definition? Oder ist die definition tatsächlich zusätzliche Felder in ein Feld namens "Attribute"?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Blick auf Ihre Frage ein wenig mehr, ich ' m Wetten, dass Sie tatsächlich mit "Segel" hier, obwohl deine Frage ist nicht markiert als solcher.
Das Problem hier ist, dass die Wasserlinie ODM/ORM hat seine eigenen Vorstellungen darüber, welche Art von Operationen werden eigentlich unterstützt, da es versucht, sein Agnostiker zwischen der Arbeit mit SQL - /NoSQL-backends und Art erfordert ein gewisses können, Dinge zu tun.
Das Ergebnis ist, dass die updates mit
$push
sind nicht wirklich unterstützt, in der Gegenwart und Sie brauchen mehr von einer JavaScript-manipulation-Affäre. Also in der Tat, Sie zu Bearbeiten müssen diese über eine.findOne
und.save()
Betrieb:Teil, der "Wasserlinie" Kurzform für was sonst als eine austauschbare Verwendung von
_id
undid
als Bedingungen, wo nur die Angabe derid
Wert als einziges argument impliziert, dass Sie beziehen sich auf dieid
Wert in deiner Abfrage, Auswahl.So, es sei denn, Sie ersetzen die Wasserlinie ODM/ORM-Sie sind ziemlich viel stecken mit dieser AFAIK, bis es eine Entscheidung für die Beibehaltung dieser Logik in einer Weise, die mehr im Einklang mit der MongoDB-API oder sonst den Zugriff auf die "rohen" Treiber-Schnittstelle zum ausführen dieser
.update()
Operationen.Referenz aber, und das wurde angedeutet, Ihre Allgemeine "shell" - syntax oder was sonst unterstützt MongoDB spezifische Treiber ist, wie dies mit der Streichung von der
$pushAll
Betreiber und die Absicht verfolgt, die Zusammenführung der Funktionalität mit der$push
und$addToSet
Betreiber mit der$je
modifier:So, dass die syntax funktionieren würde, wo es gilt, aber für Sie, ich denke, dass im "Segel" wird es nicht.
Gibt Sie einige Denkanstöße, und einen Einblick in die richtige Art und Weise, Dinge zu tun.
.save()
. Es hilft, wenn Sie dies bestätigen, so können wir re-klassifizieren Sie Ihre Frage sowie die Annahme der Antwort lassen Sie die Menschen wissen, gab es eine Lösung.Jemand, der versucht, die element in einem array ist jetzt möglich, mithilfe der systemeigenen mongodb Bibliothek.
Unter Berücksichtigung der folgenden mongodb collection-Objekt
Die folgende Abfrage verwendet werden können, um die push-array-element auf "Anlagen" am Ende. $push oder $addToSet kann dafür verwendet werden.
Dadurch wird das einfügen von einem element oder Objekt in Anlagen
Wird dies einfügen jedes Objekt in das array in Anlagen
Sie versuchen, fügen Sie ein
array
als ein element in das array. Möchten Sie vielleicht Blick auf$pushAll
als eine Kurzfristige Lösung. Dieser operator ist veraltet aber siehe hier.Alternativ können Sie einfach die Iteration über das array, und jede iteration push ein element aus deinem array in
attachments
(dies ist die empfohlene Vorgehensweise von Mongo devs).