2016-11-21 6 views
0

Ich möchte einen Wert im Unterdokument in MongoDB mit Knoten js hinzufügen. Das Schema ist:Abfrage von SuDocuments in MongoDB mit Nodejs

var commentSchema = new Schema({ 
    author:String, 
    data:String, 
    postedAt:Date 
}); 

var likeSchema = new Schema({ 
    likedBy:{ 
     type:Array, 
     default:[""] 
    }, 
    numOfLikes:{ 
     type:Number, 
     default:0 
    } 
}); 

var picSchema = new Schema({ 
    url:String, 
    likes:[likeSchema], 
    comments:[commentSchema] 
}); 

var statusSchema = new Schema({ 
    data:String, 
    likes:[likeSchema], 
    comments:[commentSchema] 
}); 

var profileSchema = new Schema({ 
    username:String, 
    password:String, 
    DOB :Date, 
    sex: String, 
    Address:String, 
    pic:[picSchema], 
    Status:[statusSchema] 
}); 

ich einen Benutzer zu anderen Benutzer-Kommentar möchten pic hinzuzufügen. Die Methode, die ich jetzt bin mit ist:

profile.update({"username":recepient,"pic._id":id},{$set:{"pic.comments":{"author":user,"data":comment,"postedAt":new Date()}}}},function(err,data){ 
        if (err){ 
         throw err; 
        }else{ 
         console.log(data); 
         res.status(200).json({status:"Added successfully"}); 
        } 

Hier erhalte ich den Fehler: kann nicht Teil pic von pic.comments zu durchqueren verwenden.

Wenn ich die Update-Anweisung verwenden als:

profile.update({"username":recepient,"pic._id":id},{$set:{"comments":{"author":user,"data":comment,"postedAt":new Date()}}},function(err,data){ 
        if (err){ 
         throw err; 
        }else{ 
         console.log(data); 
         res.status(200).json({status:"Added successfully"}); 
        } 

ich keine Störung erhalte, aber der Wert hinzugefügt zu werden, ist es nicht.

Gibt es einen Fehler mit der Update-Anweisung oder dem Schema?

Antwort

0

Profil hat [Bilder], Pic hat [Kommentare], wenn Sie Pic von "pic._id":id aktualisieren möchten, dann sollten Sie für Pic abfragen Modell, nicht Profil. SubDocuments sehen ein bisschen aus wie sql tables

pic.update({ // update Pic model, not Profile 
    "pic._id": id // removed "username":recepient as you already have picId 
    }, { 
    $set: { 
     "comments": { 
     "author": user, 
     "data":comment, 
     "postedAt":new Date() 
     } 
    } 
    }, function(err,data){ 
     if (err){ 
     throw err; 
     console.log(data); 
     res.status(200).json({status:"Added successfully"}); 
    } 
+0

Hier ist die Datenbank in einer separaten Datei definiert. Von dort exportiere ich das profileSchema-Modul. Dieser Export wird jetzt auch an anderen Orten verwendet, wie bei der Pass-Authentifizierung. Wenn ich also zwei Exportanweisungen in die Datenbankdatei schreibe, erhalte ich einen Fehler in der Passauthentifizierungsfunktion. Denn dort benötigen wir die Datei, von der das exportierte Modul aufgerufen wird. Irgendeine Idee dafür? –