所以,我一直在使用猫鼬一段时间,并且发现了一些非常奇怪的东西。如果有人能够启发我,那将会很棒。mongoose .find()方法返回具有不需要属性的对象
事情是,当使用猫鼬的.find()方法,我得到的对象是充满属性我不知道它来自哪里(我猜他们是内置的属性,但无论),我只想通过属性I .select()进行迭代。得到它了?没有?确定...解释更好:
我有我的架构和模型中声明:
var mySchema = mongoose.Schema({
name: String,
prop1: String,
prop2: String,
prop3: String
})
var myModel = DB.model('myDataBase', mySchema)
然后我想找到名称的文件,比方说,约翰和检索所有,但“姓名”字段,所以我去:
myModel.find({name: 'John'}, '-name', function(err, results){
log(results[0])
}
和log(结果[0])记录
{ prop1: 'one',
prop2: 'two',
prop3: 'three' }
到目前为止,一切都很好。但问题是,现在我想遍历这些属性并逐一检查,我不确定每个结果会有多少'道具',所以我想要做类似的事情:
for(var key in results[0]){
log(key)
}
所以,我希望它会记录'prop1','prop2'和'prop3',但不是!好吧,我得到道具1,2和3,但我也得到了很多其他的属性和功能,如:isNew,error,_maxListeners,_doc等。不仅这些extras属性,我还得到'name'属性,一个我排除了选择(它被排除在外,如第一个日志中所示)。怪怪的?
但是等等!还有更多!我在网上搜索,发现一些人说:“伙计,当通过对象属性迭代使用hasOwnProperty方法!”。所以我去了:
for (var key in results[0]){
if (results[0].hasOwnProperty(key)) log(key)
}
日志结果是一些属性(具体:$ __,是否新款,错误,_maxListeners,_doc,_pres,_posts,保存_events)和犯规包括任何的道具我首先想要的。
我的问题是,我如何迭代只有道具1,2和3,排除这些,我不知道,内置属性和我明确排除参数中的一个? (PS:我想的解决方案不涉及必须将我的对象转换为数组,如果可能的话)
另外,不是一个问题本身,而是好奇心,这些属性从哪里来?为什么它们出现在for循环中而不是当我登录对象时?为什么我排除的属性('-name')也出现在for循环中?如果它不识别刚才记录的属性,那么它具有哪些属性?
感谢您的时间和帮助! 再见!
.toObject()会给你一个普通的对象,也许这会有所帮助?额外的属性是因为你正在处理的是模型的一个实例,它不是一个普通的对象。 – 2015-02-10 22:19:08
谢谢@Kevin B!仍然有很多问题,但这确实解决了我的问题!发表您的评论作为答案,所以我可以标记它的权利? BR! – 2015-02-10 22:29:14