首先介绍一下情况。我有一个充满文档的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对象。因此,为将来参考,以下是我使用的“模式”:
var TweetSchema = new Schema({}, {strict: false});
我不想定义所有内容,因为它是Twitter时间轴对象,因此并不总是相同的。
当您使用未定义的架构时,无法像真正的javascript对象一样处理find的json输出。使用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
})
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句