'Trying to do a "join" on a ListField(ReferenceField(...))

I have documents like this

class Users(Document):

name = StringField(required=True)
email = EmailField(required=True, primary_key=True)
preferences = ListField(ReferenceField(Preferences, required=True))
languages = ListField(ReferenceField(Languages), required=True)

class Languages(Document):

name = StringField(required=True,unique=True)
active = BooleanField(default=True)

class Preferences(Document):

name = DictField(required=True,unique=True)
active = BooleanField(default=True)

I am trying to retrieve information from these 3 collections . return code from my python

output = Users.objects.aggregate([
                {
                    '$lookup':
                        {
                            "from": "languages",
                            "localField": "languages",
                            "foreignField": "_id",
                            "as": "languages"
                        }
                },
                {
                    '$lookup':
                        {
                            "from": "preferences",
                            "localField": "preferences",
                            "foreignField": "_id",
                            "as": "preferences"
                        }
                }
            ])
            return jsonify({'result': output})

but getting below error :

File "D:\user.py", line 51, in get return jsonify({'result': output}) File "C:\Users\Ideapad\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask\json_init_.py", line 355, in jsonify f"{dumps(data, indent=indent, separators=separators)}\n", File "C:\Users\Ideapad\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask\json_init_.py", line 133, in dumps rv = json.dumps(obj, **kwargs) File "C:\Users\Ideapad\AppData\Local\Programs\Python\Python310\Lib\json_init.py", line 238, in dumps **kw).encode(obj) File "C:\Users\Ideapad\AppData\Local\Programs\Python\Python310\Lib\json\encoder.py", line 201, in encode chunks = list(chunks) File "C:\Users\Ideapad\AppData\Local\Programs\Python\Python310\Lib\json\encoder.py", line 431, in _iterencode yield from _iterencode_dict(o, _current_indent_level) File "C:\Users\Ideapad\AppData\Local\Programs\Python\Python310\Lib\json\encoder.py", line 405, in _iterencode_dict yield from chunks File "C:\Users\Ideapad\AppData\Local\Programs\Python\Python310\Lib\json\encoder.py", line 438, in _iterencode o = default(o) File "C:\Users\Ideapad\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask_mongoengine\json.py", line 19, in default return superclass.default(self, obj) File "C:\Users\Ideapad\AppData\Local\Programs\Python\Python310\Lib\site-packages\flask\json_init.py", line 57, in default return super().default(o) File "C:\Users\Ideapad\AppData\Local\Programs\Python\Python310\Lib\json\encoder.py", line 179, in default raise TypeError(f'Object of type {o.class.name} ' TypeError: Object of type CommandCursor is not JSON serializable



Solution 1:[1]

its working fine with the json.dumps

dumps(output, ensure_ascii=False)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 praful