Node.js 猫鼬搜索结果可以';当我循环它时,它不能用作对象
我的集合(消息)有一个字段(程序),当我尝试使用obj[I]打印它时,它返回未定义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
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.
}