2017-02-04 1 views
0

Ich arbeite an einem Upvoting/Downvoting-Anwendung mit MongoDB und Node.JS Ich habe verketteten Schemata erstellt zwei Entfernen Element:von verschachtelten Array in Mongoose

var mongoose = require('mongoose'); 
var Voters = require('./voters'); 

var PostSchema = new mongoose.Schema({ 
    title: String, 
    link: String, 
    upvotes: {type: Number, default: 0}, 
    voters: [Voters.schema], 
    comments: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Comment' }] 
}); 


mongoose.model('Post', PostSchema); 

und für die Wähler:

var mongoose = require('mongoose'); 

var votersSchema = new mongoose.Schema({ 

    voter_id: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }, 
    votetype: Number 

}); 

module.exports = mongoose.model('Voters', votersSchema); 

Für Anwender in dem Wähler-Array, verwende ich diesen Code:

var voterModel = new Voters(); 
    voterModel.voter_id = req.payload._id; 
    voterModel.votetype = 1; 
    foundPost.voters.push(voterModel); 
    foundPost.save(); 

W das funktioniert gut. Zum Entfernen von Benutzern habe ich verschiedene Methoden ausprobiert, aber keine scheint zu funktionieren. Der aktuelle Wert ist $ pull:

Die Update-Aktion funktioniert in der Mongo-Shell, aber nicht von innerhalb des Knotens. Ich habe auch foundPost.voters.remove versucht, aber das Ergebnis war das gleiche. Auch versucht Voters.findOne, aber die Abfrage gibt immer Null zurück.

Jede Hilfe wäre willkommen.

Antwort

0

Verwenden Sie die id Methode zuerst die Wähler finden dann entfernen und letzte Dokument speichern Änderungen zu übernehmen:

var voter = foundPost.voters.id(req.payload._id).remove(); 
foundPost.save(function (err) { 
    if (err) return handleError(err); 
    console.log('the voter was removed') 
}); 
+1

Der Zug von thougth war richtig, danke! Ich musste auch die Variable voter_id im Wählermodell ändern, aber es funktioniert jetzt. – BelaKoplarovics

+0

Sicher, auch eine schnelle Überfliegen auf CRUD-Operationen in Teildokumenten: http://mongoosejs.com/docs/subdocs.html – dNitro

Verwandte Themen