2016-11-21 18 views
0

ノードjsを使用してmongoDBのサブドキュメントに値を追加します。 スキーマは次のとおりです。Nodejsを使用してMongoDBのSuドキュメントを照会する

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] 
}); 

私は一人のユーザーが他のユーザーのPICにコメントを追加したいです。私は今使用しています 方法は次のとおりです。

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"}); 
        } 

としてここで私はエラーを取得しています:横断するpic.commentsの一部の写真を使用することはできません。私のように更新ステートメントを使用していた場合

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"}); 
        } 

私はエラーを取得していないのですが、値が追加取得されていません。

更新ステートメントまたはスキーマに間違いがありますか?

答えて

0

プロフィール[図]ピックはあなたが"pic._id":idによってピックを更新したい場合は、あなたがピックを照会する必要があり、[コメント]を持っていモデル、プロフィールではありません。サブテーブルはSQLテーブルのように少し見える

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

このデータベースは別のファイルで定義されています。そこから私はprofileSchemaモジュールをエクスポートしています。このエクスポートは、現在、パスポート認証のように他の場所でも使用されています。したがって、データベースファイルに2つのエクスポートステートメントを書き込むと、パスポート認証機能でエラーが発生します。なぜなら、エクスポートされた 'module'がどこから呼び出されたのかというファイルが必要なのです。 これはどうですか? –

関連する問題