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

mongo db:从单个文档中具有范围内值的对象数组中获取子数组 我有什么:我想要的:我在互联网上搜索的内容:

如何解决mongo db:从单个文档中具有范围内值的对象数组中获取子数组 我有什么:我想要的:我在互联网上搜索的内容:

我有什么:

  • mongodb 集合,比如说 collection1
  • collection1 包含两列即。 iddata
  • idint 但扭曲是 data一个对象数组,它的键是字符串但数字
  • collection1 包含一个文档 (为了这个问题)

集合1

{
    "_id" : 1,"data" : [ 
        {
            "k1" : "001","k2" : "v1"
        },{
            "k1" : "002","k2" : "v2"
        },{
            "k1" : "004","k2" : "v3"
        },{
            "k1" : "010","k2" : "v4"
        },{
            "k1" : "015","k2" : "v5"
        }
    ]
}

我想要的:

我想从包含 datak1003012 数组中获取所有对象,从带有 _id = 1 的文档中提取>

我在互联网上搜索内容

我了解了 mongo$match,$project,$filter 等中的聚合函数。我是 mongo 的新手,无法理解聚合背后的直觉。

我知道我可以通过自定义函数来实现这一点,但它会包含一个会影响性能的 for 循环。必须有更好的方法来实现它,但我无法弄清楚。

注意:我也想用 pymongo

达到同样的效果

解决方法

抱歉,我不知道 pymongo 但下面的查询是基本思想(只要您将所有 MongoDB 运算符放在双引号内 "" 直接使用此查询必须工作):

试试这个:

db.collection1.aggregate([
    {
        "$match": { "_id": 1 }
    },{
        "$addFields": {
            "data": {
                "$filter": {
                    "input": "$data","as": "item","cond": {
                        "$and": [
                            { "$gte": [{ "$toInt": "$$item.k1" },3] },{ "$lte": [{ "$toInt": "$$item.k1" },12] }
                        ]
                    }
                }
            }
        }
    }
]);

输出:

{
    "_id" : 1,"data" : [
        {
            "k1" : "004","k2" : "v3"
        },{
            "k1" : "010","k2" : "v4"
        }
    ]
}

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