Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 猫鼬搜索结果可以';当我循环它时,它不能用作对象_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js 猫鼬搜索结果可以';当我循环它时,它不能用作对象

Node.js 猫鼬搜索结果可以';当我循环它时,它不能用作对象,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我的集合(消息)有一个字段(程序),当我尝试使用obj[I]打印它时,它返回未定义 var messages = db.model('messages', mongoose.Schema({}), 'messages'); messages.find({}).limit(10).exec(function(err, obj) { console.log(obj); for(var i=0; i<obj.length; i++) { console.log(o

我的集合(消息)有一个字段(程序),当我尝试使用obj[I]打印它时,它返回未定义

var messages = db.model('messages', mongoose.Schema({}), 'messages');
messages.find({}).limit(10).exec(function(err, obj) {
    console.log(obj);
    for(var i=0; i<obj.length; i++) {
        console.log(obj[i].PROGRAM);    //why here return undefine ? 
    }
});

您希望只返回一个对象吗?如果是,以下代码应符合您的要求:

messages.findOne({"Programm" : "sudo}, function(error, obj) {
    // ...
});

但是,如果要查询消息集合中的所有对象,可以使用:

messages.find({}, function(error, obj) {
    // ...
    obj.forEach(function(o) {
        console.log(o.property);
    });
});

使用Mongoose时,需要定义模式,然后创建模型。如果要使用现有集合,则需要使用架构定义对结构建模。例如,如果文档中有一个名为
PROGRAM
的字段,且其类型为
String

var Message = mongoose.model('messages', mongoose.Schema({
        PROGRAM : String
    }), 'messages');
稍后您可以将其称为:

var msg = new Message();
msg.PROGRAM = 'npm';
if (msg.PROGRAM === 'node') {
   // etc... do whatever you'd want. 
} 

对不起,我的英语很差。我的问题是如何获取结果,当我尝试console.log(obj[I].PROGRAM)时,它返回未定义的结果。但是,console.log(obj)是正确的。“console.log(obj[i].PROGRAM)”返回“未定义”。“console.log(obj[i].\u doc.PROGRAM)”返回我需要的内容。节点中的“\u doc”是什么?您的模式是什么?它需要定义一个
PROGRAM
字段。@WiredPairie喜欢这个问题:但我仍然不知道为什么我应该使用obj[I]。\u doc.PROGRAM节点中的“\u doc”是什么?添加了一个解释作为答案。你的意思是,如果我想使用每个现有集合,我必须定义所有字段。有没有像perl控件mysql这样方便的使用方法?不要使用Mongoose。如果只使用本机驱动程序,则它不强制或支持模式定义。Mongoose在驱动程序的顶部添加了许多抽象。
var msg = new Message();
msg.PROGRAM = 'npm';
if (msg.PROGRAM === 'node') {
   // etc... do whatever you'd want. 
}