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
        }
    ]
}

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

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...