热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mongodb内嵌数组查询问题:如何限定返回与条件匹配的数组

往数据库表“users”中插入测试数据db.users.insertMany([{_id:NumberLong(1181675746),shard_qty:4,good

//往数据库表“users”中插入测试数据> db.users.insertMany([{"_id" : NumberLong(1181675746),"shard_qty" : 4,"goods_qty" : 0,"shop_qty" : 0,"favorite_qty" : 4,"favorite_shards" : [ {"sid" : NumberLong(580),"favorite_dt" : ISODate("2015-06-26T12:13:06.405+08:00"),"is_attention" : true}, {"sid" : NumberLong(579),"favorite_dt" : ISODate("2015-06-26T12:13:06.405+08:00"),"is_attention" : true}, {"sid" : NumberLong(578),"favorite_dt" : ISODate("2015-06-26T12:13:06.405+08:00"),"is_attention" : true}, {"sid" : NumberLong(577),"favorite_dt" : ISODate("2015-06-26T13:20:48.449+08:00"),"is_attention" : true}]}]
)

//一:假设查询条件为:

> db.getCollection('users').findOne({'_id':NumberLong(1181675746),'favorite_shards.sid': {'$in':[NumberLong(577),NumberLong(578)]}},{"favorite_shards":1}
)

//想要返回的数据:

{"_id" : NumberLong(1181675746),"favorite_shards" : [ {"sid" : NumberLong(578),"favorite_dt" : ISODate("2015-06-26T12:13:06.405+08:00"),"is_attention" : true}, {"sid" : NumberLong(577),"favorite_dt" : ISODate("2015-06-26T13:20:48.449+08:00"),"is_attention" : true}]
}

//实际返回的数据:

{"_id" : NumberLong(1181675746),"favorite_shards" : [{"sid" : NumberLong(580),"favorite_dt" : ISODate("2015-06-26T04:13:06.405Z"),"is_attention" : true},{"sid" : NumberLong(579),"favorite_dt" : ISODate("2015-06-26T04:13:06.405Z"),"is_attention" : true},{"sid" : NumberLong(578),"favorite_dt" : ISODate("2015-06-26T04:13:06.405Z"),"is_attention" : true},{"sid" : NumberLong(577),"favorite_dt" : ISODate("2015-06-26T05:20:48.449Z"),"is_attention" : true}]
}

//二:正确的查询条件:实现的逻辑就是将原来的数组拆开,然后重组就好了。

> db.getCollection('users').aggregate([{"$match":{"_id":NumberLong(1181675746)}},{"$project":{"_id":1,"favorite_shards":1}},{"$unwind": "$favorite_shards"},{$match: {"favorite_shards.sid": {'$in':[NumberLong(577),NumberLong(578)]}}},{"$group": {"_id": "$_id", "favorite_shards": {"$push": "$favorite_shards"}}}]).pretty()

{"_id" : NumberLong(1181675746),
"favorite_shards" : [{"sid" : NumberLong(578),"favorite_dt" : ISODate("2015-06-26T04:13:06.405Z"),"is_attention" : true},{"sid" : NumberLong(577),"favorite_dt" : ISODate("2015-06-26T05:20:48.449Z"),"is_attention" : true}
]
}

 


推荐阅读
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Redis底层数据结构之压缩列表的介绍及实现原理
    本文介绍了Redis底层数据结构之压缩列表的概念、实现原理以及使用场景。压缩列表是Redis为了节约内存而开发的一种顺序数据结构,由特殊编码的连续内存块组成。文章详细解释了压缩列表的构成和各个属性的含义,以及如何通过指针来计算表尾节点的地址。压缩列表适用于列表键和哈希键中只包含少量小整数值和短字符串的情况。通过使用压缩列表,可以有效减少内存占用,提升Redis的性能。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 带添加按钮的GridView,item的删除事件
    先上图片效果;gridView无数据时显示添加按钮,有数据时,第一格显示添加按钮,后面显示数据:布局文件:addr_manage.xml<?xmlve ... [详细]
  • node.jsurlsearchparamsAPI哎哎哎 ... [详细]
  • 巧用arguments在Javascript的函数中有个名为arguments的类数组对象。它看起来是那么的诡异而且名不经传,但众多的Javascript库都使用着它强大的功能。所 ... [详细]
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • step1.为mongodb添加admin管理员root@12.154.29.163:~#mongoMongoDBshellversionv3.4.2connectingto:mo ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 本文介绍了如何在Jquery中通过元素的样式值获取元素,并将其赋值给一个变量。提供了5种解决方案供参考。 ... [详细]
  • 本文介绍了一种求解最小权匹配问题的方法,使用了拆点和KM算法。通过将机器拆成多个点,表示加工的顺序,然后使用KM算法求解最小权匹配,得到最优解。文章给出了具体的代码实现,并提供了一篇题解作为参考。 ... [详细]
author-avatar
会唱歌的高跟鞋
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有