首先介绍一下这种情况.我有一个填充文档的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); };
查询完成后,它将调用回调(cb).
在回调中,我想将值绑定到变量,以便稍后使用它们.这是我似乎无法解决的问题:
console.log(result) == [{id_str:'12346875',user:{statuses_count:500,screen_name:'username'}}] console.log(result.id_str) == 'undefined'
同样适用于:
console.log(result[0].id_str)
为什么我得不到具体的价值?typeof(结果)表示'对象'.
每个请求更新 我的非严格模式导致Mongoose返回非真实的javascript对象.因此,为了将来参考,我使用的是'schema':
var TweetSchema = new Schema({}, {strict: false});
我不想定义所有内容,因为它是Twitter时间轴对象,因此并不总是相同.
当您使用未定义的架构时,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 })
要么:
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 })