[英]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.