Mongoengine聚合无法像mongo一样工作

迈克尔·罗伊夫

我有一个带有嵌入式文档列表的Mongo文档(下面的示例)。我正在尝试运行一个聚合,该聚合将返回列表中仅包含匹配对象的完整文档。

示例收集数据

{
    "make": "Toyota",
    "color": "blue",
    "tires": [{
        "make": "Mishlen",
        "size": 185
    }, {
        "make": "Mishlen",
        "size": 210
    }]
}

我设法通过以下查询使其在MongoDB中工作

db.cars.aggregate(
    [
        {
            $match: {$and: [{"tires.size": {$gt: 200}}]}
        },
        {
            $addFields: {
                "tires": {
                    $filter: {
                        input: '$tires',
                        as: 'tires',
                        cond: {$gt: ['$$tires.size', 200]}
                    }
                }
            }
        },
        {
            $limit: 100
        },
        {
            $skip: 0
        }
])

我正在尝试在mongoengine中运行相同的聚合,并且每次都返回一个空列表。

pipeline = [
    {
        "$match": {"$and": [{"tires.size": {"$gt": 200}}]}
    },
    {
        "$addFields": {
            "tires": {
                "$filter": {
                    "input": "$tires",
                    "as": "tires",
                    "cond": {"$and": [{"$gt": ["$$tires.size", 200]}]}
                }
            }
        }
    }
]
self.obj_type.objects.aggregate(*pipeline)

我究竟做错了什么?

更新

我的问题比我想象的要容易得多,我想念我将数字作为字符串而不是python中的int传递。谢谢大家的帮助

挖泥船

插入您提供的示例文档后,使用您提供的管道运行聚合没有任何特殊问题。见下文:

class Tire(EmbeddedDocument):
    make = StringField()
    size = IntField()

class Car(Document):
    make = StringField()
    color = StringField()
    tires = EmbeddedDocumentListField(Tire)

    meta = {'collection': 'cars'}

pipeline = [
    {
        "$match": {"$and": [{"tires.size": {"$gt": 200}}]}
    },
    {
        "$addFields": {
            "tires": {
                "$filter": {
                    "input": "$tires",
                    "as": "tires",
                    "cond": {"$and": [{"$gt": ["$$tires.size", 200]}]}
                }
            }
        }
    }
]

# Verify aggregation pipeline runs fine with the driver (pymongo)
coll = Car._get_collection()
pymongo_result = list(coll.aggregate(pipeline))
assert len(pymongo_result) == 1

# Run same aggregation pipeline with MongoEngine
mongoengine_result = list(Car.objects.aggregate(*pipeline))
assert len(mongoengine_result) == 1

result = [
    {'_id': ObjectId('5e0a5c8e7c57cd9b300710fb'),
     'color': 'blue',
     'make': 'Toyota',
     'tires': [{'make': 'Mishlen', 'size': 210.0}]
    }
]
assert mongoengine_result == pymongo_result == result

我使用了最新的mongoengine版本,但AFAIK最近没有对MongoEngine的聚合包装进行重大更改。问题可能出self.obj_type.objects在您的头上,请像我一样尝试使用新的查询集(即YourDocumentClass.objects),看看是否有帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android for loop无法像java一样工作

来自分类Dev

Android for loop无法像java一样工作

来自分类Dev

HttpHandler WebRequest内容类型无法像浏览器一样工作

来自分类Dev

parseInt无法正常工作并将值像字符串一样对待

来自分类Dev

C#WPF scrollviewer无法像Windows Store应用程序一样工作

来自分类Dev

Shinyapp无法像本地一样在Shinyapps.io上工作

来自分类Dev

为什么ggplotly无法像ggplot一样在rmarkdown中工作

来自分类Dev

Solaris Home / End键无法像Debian / Ubuntu一样工作

来自分类Dev

Unix密码哈希的node.js DES加密无法像mkpasswd一样工作

来自分类Dev

HttpHandler WebRequest内容类型无法像浏览器一样工作

来自分类Dev

React Native-像动画一样的Whatsapp无法正常工作

来自分类Dev

xml 幻灯片无法像墙纸一样正常工作

来自分类Dev

像内置<strong>一样工作的自定义聚合物元素<x-strong>?

来自分类Dev

如何使键盘像OSX System Wide一样工作?

来自分类Dev

“ or {}”是否可以像javascript一样在python中工作?

来自分类Dev

如何使UITextField像Swift中的UISearchBar一样工作?

来自分类Dev

像功能一样使用Excel工作簿

来自分类Dev

数组如何像C中的指针一样工作?

来自分类Dev

XUbuntu:使Shift + NumPad像Windows一样工作

来自分类Dev

如何使键盘像OSX System Wide一样工作?

来自分类Dev

XUbuntu:使Shift + NumPad像Windows一样工作

来自分类Dev

像功能一样使用excel工作簿

来自分类Dev

使Shift键像箭头键一样工作

来自分类Dev

使mutt删除行为像苹果邮件一样工作

来自分类Dev

使屏幕像终端一样工作(滚动+备用屏幕)

来自分类Dev

Android中的LocationListener是否像循环一样工作?

来自分类Dev

MySQL存储过程像普通SQL一样工作

来自分类Dev

像Android布局一样工作的CSS框架?

来自分类Dev

如何使MediaElement像AxWindowsMediaPlayer一样工作?

Related 相关文章

  1. 1

    Android for loop无法像java一样工作

  2. 2

    Android for loop无法像java一样工作

  3. 3

    HttpHandler WebRequest内容类型无法像浏览器一样工作

  4. 4

    parseInt无法正常工作并将值像字符串一样对待

  5. 5

    C#WPF scrollviewer无法像Windows Store应用程序一样工作

  6. 6

    Shinyapp无法像本地一样在Shinyapps.io上工作

  7. 7

    为什么ggplotly无法像ggplot一样在rmarkdown中工作

  8. 8

    Solaris Home / End键无法像Debian / Ubuntu一样工作

  9. 9

    Unix密码哈希的node.js DES加密无法像mkpasswd一样工作

  10. 10

    HttpHandler WebRequest内容类型无法像浏览器一样工作

  11. 11

    React Native-像动画一样的Whatsapp无法正常工作

  12. 12

    xml 幻灯片无法像墙纸一样正常工作

  13. 13

    像内置<strong>一样工作的自定义聚合物元素<x-strong>?

  14. 14

    如何使键盘像OSX System Wide一样工作?

  15. 15

    “ or {}”是否可以像javascript一样在python中工作?

  16. 16

    如何使UITextField像Swift中的UISearchBar一样工作?

  17. 17

    像功能一样使用Excel工作簿

  18. 18

    数组如何像C中的指针一样工作?

  19. 19

    XUbuntu:使Shift + NumPad像Windows一样工作

  20. 20

    如何使键盘像OSX System Wide一样工作?

  21. 21

    XUbuntu:使Shift + NumPad像Windows一样工作

  22. 22

    像功能一样使用excel工作簿

  23. 23

    使Shift键像箭头键一样工作

  24. 24

    使mutt删除行为像苹果邮件一样工作

  25. 25

    使屏幕像终端一样工作(滚动+备用屏幕)

  26. 26

    Android中的LocationListener是否像循环一样工作?

  27. 27

    MySQL存储过程像普通SQL一样工作

  28. 28

    像Android布局一样工作的CSS框架?

  29. 29

    如何使MediaElement像AxWindowsMediaPlayer一样工作?

热门标签

归档