Ich kämpfe mit einem Update-Aufruf, der aus irgendeinem Grund nicht zu funktionieren scheint. Für einen kurzen Kontext haben wir eine Node.js-Anwendung, die auf Sails.js mit Waterline ORM ausgeführt wird.Nicht möglich, ein Element in ein MongoDB-Array innerhalb des Dokuments zu schieben, während Waterline
Wie pro meine package.json Datei, hier sind die Versionen ich verwende:
- connect-Mongo:^1.3.2
- mongodb:^2.2.29
- Segel: ~ 0.12 0,4
- Segel-mongo:^0.12.3
ich habe eine Sammlung "Produkte" und jedes Produkt sieht wie folgt in der Datenbank genannt:
{
"_id" : ObjectId("59d5f12025423dc0261c911d"),
"category" : ObjectId("59a9bcf984d756998eaa22e5"),
"status" : "pendingReview",
"isDeleted" : false,
"events" : [
{
"when" : 1507193120,
"actor" : "56cc0f76e1a25cde0d2c15ab",
"action" : "Submitted product",
"note" : "Jeff added this product. It is awaiting review."
}
],
"productId" : "171005-00000",
"createdAt" : ISODate("2017-10-05T08:45:20.538Z"),
"updatedAt" : ISODate("2017-10-05T08:45:20.538Z")
}
Ich habe eine Benutzeroberfläche, wo ein Benutzer mehrere Produkte "genehmigen" kann, bevor sie Website-Besuchern angezeigt werden. Um dies zu tun, möchte ich einfach mehrere Datensätze aktualisieren, indem Sie den Schlüssel status
in "approved" ändern und ein Ereignis im Array events
jedes Dokuments hinzufügen. Das Ereignis muss sich an Position 0 des Arrays befinden. Ich versuche, diese Datensätze mit dem folgenden Code zu aktualisieren, aber es scheint nicht zu funktionieren:
var moment = require('moment');
Products.native(function(error, collection) {
if (error) {
throw error;
}
collection.update(
{ _id: ['59d5f12025423dc0261c911d'] },
{
$set: {
status: 'approved',
$push: {
events: {
when: moment().unix(),
actor: req.body.userId,
action: 'Approved product',
note: req.body.userName + ' approved this product.'
}
}
}
},
{ multi: true },
function(error, count, status) {
if (error) {
sails.log.error(error);
return res.serverError('Database error. Reference ID: ' + req.referenceId);
}
return res.ok(count);
});
});
Wenn ich diese Abfrage ausführen, ich habe keine Fehler bekommen und wenn ich meine Datenbank überprüfen, wird der Datensatz hat nicht aktualisiert Beim Ausführen der Abfrage erhalte ich folgende Daten:
{
"ok": 1,
"nModified": 0,
"n": 0
}
Was passiert hier? Warum wird nicht aktualisiert? Wenn ich das richtig verstanden habe, kann die Abfrage das Dokument finden, aber es wird nicht aktualisiert. Ist das korrekt? Wenn ja, wie kann ich das beheben? Vielen Dank.
Das war es! Vielen Dank! – Nag