javascript – mongoose .find()方法返回带有不需要的属性的对象
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – mongoose .find()方法返回带有不需要的属性的对象,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2148字,纯文字阅读大概需要4分钟。
内容图文
![javascript – mongoose .find()方法返回带有不需要的属性的对象](/upload/InfoBanner/zyjiaocheng/712/cba1e3bc301d48ce9c2798e711d1c42d.jpg)
所以,我已经和猫鼬一起工作了一段时间,我发现了一些非常奇怪的东西.如果有人能够启发我会很棒.
问题是,当使用mongoose的.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])
}
和日志(结果[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等.不仅这些额外属性,我还得到’name’属性,我从选择中排除了一个(并且它被排除在外,如第一个日志中所示).怪啊?
可是等等!还有更多!我在网上搜索过,发现有些人说“Dude,迭代对象属性时使用hasOwnProperty方法!”.所以我去了:
for (var key in results[0]){
if (results[0].hasOwnProperty(key)) log(key)
}
日志结果是一些属性(具体来说:$__,isNew,error,_maxListeners,_doc,_pres,_posts,save,_events)并且不包括我想要的任何道具.
我的问题是,我怎么能只迭代道具1,2和3,排除这些,我不知道,内置属性和我在参数中明确排除的属性? (ps:我在想一个不需要将我的对象转换成数组的解决方案,如果可能的话)
此外,这不是一个问题,但出于好奇,这些属性来自哪里?为什么它们出现在for循环中而不是在我记录对象时?为什么我排除的属性(‘-name’)也出现在for循环中?如果它没有识别刚刚记录的属性,那么它是什么hasOwnProperty?
感谢您的时间和帮助!
再见!
解决方法:
作为Kevin B的回答,您可以通过{lean:true}作为选项:
myModel.find({name: 'John'}, '-name', {lean: true}, function(err, results){
log(results[0])
}
在MongoDB中,文档仅保存为对象.当Mongoose检索它们时,它会将它们转换为Mongoose文档.这样做会添加所有那些包含在for循环中的键.这是允许您使用所有文档方法的原因.如果您不使用任何这些,精益是一个很好的选择,因为它会跳过整个过程,提高查询速度. Potentially 3x as fast.
内容总结
以上是互联网集市为您收集整理的javascript – mongoose .find()方法返回带有不需要的属性的对象全部内容,希望文章能够帮你解决javascript – mongoose .find()方法返回带有不需要的属性的对象所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。