如何解决mongo db:从单个文档中具有范围内值的对象数组中获取子数组 我有什么:我想要的:我在互联网上搜索的内容:
我有什么:
-
mongodb
集合,比如说collection1
-
collection1
包含两列即。id
和data
-
id
是int
但扭曲是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"
}
]
}
我想要的:
我想从包含 data
到 k1
的 003
的 012
数组中获取所有对象,从带有 _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 举报,一经查实,本站将立刻删除。