如何从mongoose查询回调中访问特定值?

Rol*_*and 4 javascript object mongoose mongodb

首先介绍一下这种情况.我有一个填充文档的MongoDB集合.我使用schema.statics来查询特定的行

TweetSchema.statics.maxAndLimit = function(screen_name, cb) {
  this.find({
    'user.screen_name': screen_name
  }).sort({'id_str':1}).select({'id_str':1,'user.statuses_count':1,'user.screen_name':1,'_id':0}).limit(1).exec(cb);
};
Run Code Online (Sandbox Code Playgroud)

查询完成后,它将调用回调(cb).

在回调中,我想将值绑定到变量,以便稍后使用它们.这是我似乎无法解决的问题:

console.log(result) == [{id_str:'12346875',user:{statuses_count:500,screen_name:'username'}}]

console.log(result.id_str) == 'undefined'
Run Code Online (Sandbox Code Playgroud)

同样适用于:

console.log(result[0].id_str)
Run Code Online (Sandbox Code Playgroud)

为什么我得不到具体的价值?typeof(结果)表示'对象'.

每个请求更新 我的非严格模式导致Mongoose返回非真实的javascript对象.因此,为了将来参考,我使用的是'schema':

var TweetSchema = new Schema({}, {strict: false});
Run Code Online (Sandbox Code Playgroud)

我不想定义所有内容,因为它是Twitter时间轴对象,因此并不总是相同.

Mat*_*yhr 5

当您使用未定义的架构时,find的json输出无法像真正的javascript对象那样处理.使用toObject()来转换它,你就可以像使用任何其他对象一样使用它,你可以在这里看到区别:

var Model = mongoose.model('Model', new mongoose.Schema({}))
Model.find({user_id: '1234'}, function(err, obj) {   
    console.log(obj[0].user_id)  // undefined                   
    console.log(obj[0].toObject().user_id)  // 1234     
})
Run Code Online (Sandbox Code Playgroud)

要么:

var Model = mongoose.model('Model', new mongoose.Schema({
    user_id: String,
}))
Model.find({user_id: '1234'}, function(err, obj) {                      
    console.log(obj[0].user_id)  // 1234          
    console.log(obj[0].toObject().user_id)  // 1234
})
Run Code Online (Sandbox Code Playgroud)