微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

mongo实现子文档的任意查询

对于子文档的查询,通常可以根据$slice获取子集,但是这个子集是连续的,如果想要任意数量的符合条件的子文档,可以使用如下的方法

 db.test3.find().pretty()
{
    "_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-26T04:13:06.405Z"),"is_attention" : true
        },{
            "sid" : NumberLong(579),{
            "sid" : NumberLong(578),{
            "sid" : NumberLong(577),"favorite_dt" : ISODate("2015-06-26T05:20:48.449Z"),"is_attention" : true
        }
    ]
}
> db.test3.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),"is_attention" : true
        }
    ]
}

这样就可以达到我们的需求。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐