1

だから私はスレッド用にこのスキーマを持っています(それはほとんどチャットルームです:)

var threadSchema = mongoose.Schema({
    messages: [{
        message:String,
        type:String
    }],
    point_id:String
});

次のようにモデルにコンパイルします。

var Thread = mongoose.model('Thread',threadSchema);

私の問題は、次のようにスレッド オブジェクトのメッセージ要素にアクセスするときです。

console.log(thread_instance.messages);

「[object Object]」を出力します。ブラウザで解析してもこれは行われます。文字通りその文字列 '[object Object]' を返しています。

配列へのプッシュ方法と関係があると思います:

this_thread.messages.push({message:data.message,type:data.type});

私の書き方/読み方の何が問題になっていますか? どうぞよろしくお願いいたします。

4

2 に答える 2

2

ここでの問題は、キーの1つが「タイプ」であるオブジェクトが配列に含まれていることだと思います。 typeマングースは、スキーマ内のものがどのようなタイプであるかを次のように伝えるために使用されます。

var ExhibitSchema = new Schema({
    title  : { type: String, trim: true }
    , description : { type: String, trim: true }
    , discussion  :   {type: Schema.Types.ObjectId, ref: "Discussion"} 
    , views: {type: Number, default: 0}

したがって、あなたの場合、messages文字列型の配列があることをマングースに伝えています。おそらくそのmessage:String部分を無視するだけです。その配列に何かを追加するとtoString()、それを格納するために呼び出されます。["[object Object]", "[object Object]"これが、データベースに が表示されている理由です。

スキーマを次のように変更して修正します。

var threadSchema = mongoose.Schema({
    messages: [{
        message:{ type: String},
        type:{ type: String}
    }],
    point_id:String
});
于 2013-08-17T14:06:53.703 に答える
0

messagesは実際にはオブジェクトの配列なので、次のようにメッセージ配列へのインデックスを指定できます

console.log(thread_instance.messages[0]);

messages配列に複数の要素が含まれている場合は、通常の for ループが必要です

for (var i = 0; i<thread_instance.messages.length; i++) {
  // use i as an array index
  console.log(thread_instance.messages[i]);
}  

すべてを組み合わせると、コードは次のようになります

Thread.find(function (err, thread_instance) {

    for (var i = 0; i<thread_instance.messages.length; i++) {
      // use i as an array index
      console.log(thread_instance.messages[i]);
    }  

})
于 2013-08-17T13:37:26.653 に答える