Javascript 数组对象不可编辑

Javascript 数组对象不可编辑,javascript,node.js,mongoose,Javascript,Node.js,Mongoose,我在Mongoose和NodeJS中有这个模型: const VisitorSchema=新模式({ 访问:[{date:date,path:String,details:String}], // ... }); 该代码: //获取所有访问者。 VisitorSchema.statics.getAllVisitors=函数(){ 试一试{ //返回所有用户。 return Visitor.find() .sort({created:-1}) .exec(); }捕捉(错误){ 控制台日志(er

我在Mongoose和NodeJS中有这个模型:

const VisitorSchema=新模式({
访问:[{date:date,path:String,details:String}],
// ...
});
该代码:

//获取所有访问者。
VisitorSchema.statics.getAllVisitors=函数(){
试一试{
//返回所有用户。
return Visitor.find()
.sort({created:-1})
.exec();
}捕捉(错误){
控制台日志(err);
}
};
//检查并打印新用户。
VisitorSchema.statics.CheckPath=异步函数(){
日志(“检查路径…”);
let visitors=等待。getAllVisitors();
为了(让访客中的访客){
试一试{
用于(让五名访客参观){
// ...
}
}捕获(e){
控制台日志(e);
log(Object.prototype.toString.call(visitor.visions));
投掷(e);
}
}
};
意外运行此函数会引发:

Checking paths...
TypeError: visitors.visits is not iterable
    at Function.VisitorSchema.statics.checkPaths
[object Array]
5efba3a0a97a823909802df5
(node:23663) UnhandledPromiseRejectionWarning: TypeError: visitors.visits is not iterable
    at Function.VisitorSchema.statics.checkPaths 
    at processTicksAndRejections
    ....
我还检查了mongo shell中的MongoDB对象,子文档
访问了相关文档,因为相关文档是一个数组,看起来还可以:

> db.visitors.findOne({_id: ObjectId("...")})
{
    "_id" : ObjectId("..."),
    "visits" : [
        {
            "_id" : ObjectId("..."),
            "date" : ISODate("..."),
            "path" : "/"
        },
        ...
    ]
}

数组对象怎么可能不可iterable?

数组在JS中总是可iterable。请注意
visitors
集合中的行,这些行可能缺少
visitors
属性。如果该属性不是MongoDB中的数组(这是允许的,因为MongoDB是NoSQL数据库),它仍将从模型定义转换为空数组

在您的特定情况下,您有一个输入错误:

for(让v代表访客访问)//复数
应该是

for(让v代表访问者访问)//单数

不应该将
getAllVisitors
声明为async(
VisitorSchema.statics.getAllVisitors=async function(){…}
)?您在第二个内部for循环中引用了错误的变量
for(让v的访问者访问)
应该是
for(让v的访问者访问)
@Sven你是对的,这就解决了它。你能写一个答案,强调所有数组对象都是可iterable的,如果不是的话,bug就在别处吗?@Sven是正确的@miguelmorin,但是,你也可以尝试这个
visitors.forEach((v)=>{console.log(v.visitos.id)}
@secan,前提是OP打算
返回wait Visitor.find()