繁体   English   中英

在猫鼬JS中看到数组元素

[英]Seeing array elements in mongoose js

所以我有一个线程的这种模式(这几乎是一个聊天室:)

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

我编译成一个模型,如下所示:

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

我的问题是,当我像这样访问线程对象中的message元素时:

console.log(thread_instance.messages);

它打印出“ [object Object]”。 即使我在浏览器中解析它,它也会这样做; 它实际上是返回字符串'[object Object]'。

我相信这与我如何推向阵列有关:

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

我的写作/阅读方式有什么问题? 非常感谢您的宝贵时间。

我认为这里的问题是您的数组包含一个对象,其中键之一是“类型”。 猫鼬使用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
});

messages实际上是一个对象数组,因此您可以像这样指定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]);
    }  

})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM