为了账号安全,请及时绑定邮箱和手机立即绑定

mongodb数组查询

mongodb数组查询

蝴蝶不菲 2019-04-13 08:46:09
{'a':1,'b':2,'c':3,'d':[{'e':4,'f':5,'g':6},{'e':0,'f':'','g':3},{'e':1,'f':'','g':3},]}{'a':1,'b':2,'c':3,'d':[{'e':4,'f':'','g':6},{'e':0,'f':'','g':3},{'e':1,'f':'','g':3},]}这样的记录,问题是怎么获取d数组中f都为空的文档(如上的结果是文档2)?谢谢
查看完整描述

2 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

  只知道这个用$where怎么实现,其他方法我也暂时不知道。
注意
如果是经常性的查询,强烈不建议使用$where,它会遍历所有文档,每个文档都会从BSON转换成javascript对象,然后通过表达式来处理,比常规查询慢很多,只有走投无路时才用。先使用常规查询进行过滤,然后再使用$where,这样组合使用可以降低性能损失。如果可能先使用索引进行过滤,$where只用于对结果进行进一步过滤。
——————————————————————————————摘自《Mongodb权威指南(E2)》
代码:
db.collection.find({"$where":function(){
vard=this.d,i=0,j=d.length;
for(i,j;iif(d[i].f!="")returnfalse;
};
returntrue;
}});
                            
查看完整回答
反对 回复 2019-04-13
?
jeck猫

TA贡献1909条经验 获得超7个赞

db.demo.find({d:{$not:{$elemMatch:{f:{$ne:""}}}}})
在mongoshell上测试了一下:
>db.demo.insert({
...'a':1,
...'b':2,
...'c':3,
...'d':[
...{'e':4,'f':'','g':6},
...{'e':0,'f':'','g':3},
...{'e':1,'f':'','g':3},
...]
...})
WriteResult({"nInserted":1})
>db.demo.insert({
...'a':1,
...'b':2,
...'c':3,
...'d':[
...{'e':4,'f':5,'g':6},
...{'e':0,'f':'','g':3},
...{'e':1,'f':'','g':3},
...]
...}
...)
WriteResult({"nInserted":1})
>db.demo.find({d:{$not:{$elemMatch:{f:{$ne:""}}}}})
{"_id":ObjectId("54129ff745d4261bacca6dcd"),"a":1,"b":2,"c":3,"d":[{"e":4,"f":"","g":6},{"e":0,"f":"","g":3},{"e":1,"f":"","g":3}]}
                            
查看完整回答
反对 回复 2019-04-13
  • 2 回答
  • 0 关注
  • 337 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号