2016-11-01 12 views
0

私はテーブルユーザーを持っています。これがスキーマです。mongoDBオブジェクト内にユニークな自動インクリメントIDを追加するにはどうすればいいですか

var usersSchema = mongoose.Schema({ 
    uname : {type : String , unique: true}, 
    email : {type : String}, 
    logintype : {type : String}, 
    password : String, 
    status : String, 
    hash : String, 
    social: {}, 
    games: Object, 
    os: String, 
    friends: Object, 
    msges:Object 
}); 

msgesはオブジェクトです。しかし、私が望むのは、msgesの中に鍵の値のペアを持つことです。だから私がしたのは

function sendMsgToFriend(uname,friendUname,title,msg,time,callback){ 
    global.users.find({"uname":friendUname}, 
    function(err,doc){ 
     if(err){ 
      callback(false,err,"Msg cannot be sent"); 
     }else{ 
      global.users.update({"uname" : uname}, 
      { 
       $addToSet : { 
       "msges":{time:{"from":uname,"title":title,"msg":msg,"read":false}} 
       } 
      },function(err,doc){ 
       if(err){ 
        callback(false,err,"Msg cannot be sent"); 
       }else{ 
        callback(true,null,"Msg has been sent"); 
       } 
      } 
     ); 
     } 
    } 
); 
} 

私はキーを作り、その価値を残そうとしました。しかし、何が起こったのかは、時間の価値の代わりに、文字列「時間」が現れたということでした。自動インクリメントキーを作ることはできますか?前もって感謝します。

答えて

1

あなたがオブジェクトとして「MSGの」を定義が、私はあなたの質問から読んだあなたは、オブジェクトの配列を望んます。..

なぜあなたは、メッセージのためのモデルを作成し、メイク「のMSG」を作成しない配列をそのオブジェクトへの参照の

var usersSchema = mongoose.Schema({ 
    uname : {type : String , unique: true}, 
    email : {type : String}, 
    logintype : {type : String}, 
    password : String, 
    status : String, 
    hash : String, 
    social: {}, 
    games: Object, 
    os: String, 
    friends: Object, 
    msges: [{ 
     message_id : { type: Schema.Types.ObjectId, ref: 'Message' }, 
     read_on : Boolean }] 
}); 

とメッセージ

var messageSchema = Schema({ 
    from : String, 
    title: String, 
    msg : String, 
    send_on : Date 
}); 

var Message = mongoose.model('Message', messageSchema); 

のスキーマのすべてのメッセージを収集していると、ユーザーごとにリードステータスを追跡することができますこの方法。あなたはエクストラコレクションをしたくない場合は、ユーザーのスキーマを作るようなもの :

var usersSchema = mongoose.Schema({ 
     uname : {type : String , unique: true}, 
     email : {type : String}, 
     logintype : {type : String}, 
     password : String, 
     status : String, 
     hash : String, 
     social: {}, 
     games: Object, 
     os: String, 
     friends: Object, 
     msges: [{ 
      id : Schema.Types.ObjectId, 
      from : String, 
      title: String, 
      msg : String, 
      send_on : Date, 
      read_on : Boolean }] 
    }); 

をしかし、それを覚えておいてくださいあなたはmongoose populate

UPDATEを使用することができますretriavalユーザーの間にメッセージを取得するための

メッセージを送信したユーザーにもメッセージを表示したい場合は、両方のユーザーが配列に入れておく必要があります(idを等しく保つ)。だから、あなたのシナリオでは最良の解決方法について考える/話すべきです。

+0

私はそれも考えましたが、彼らは別のテーブルを望んでいません。彼らはそれがその中に入れ子になって欲しい。 –

+0

また、別のコレクションを取得しないように、スキーマをUserテーブルに含めることもできます – HoefMeistert

+0

もっと簡単にすることはできますか?これは私の最初のプロジェクトです:( –

関連する問題