匹配 EmbedDocuments 中的两个字段

match both field in EmbedDocuments

我需要一些有关 mongoengine 过滤的帮助。我想做的是过滤嵌入文档中的 2 个字段。我希望两者在同一文档中匹配,但我不知道如何以这种方式包含它。

示例数据:

{
    "_id" : "1",
    "active" : true,
    "booking" : [ 
        {
            "date" : 1,
            "status" : true
        }
    ]
}
{
    "_id" : "2",
    "active" : true,
    "booking" : [ 
        {
            "date" : 1,
            "status" : false
        },
        {
            "date" : 2,
            "status" : true
        }
    ]
}

我想查询 day=1 & status=true 并且只得到 #1 作为结果。但是,此查询会 return #1 和 #2,因为日期和状态都可以跨文档存在。

docs.objects.filter(
    Q(active=True) & Q(booking__date=1) & Q(booking__status=True))

我尝试了一些不同的方法,但它们给出的结果与我的预期相去甚远。比如这些 return 空的。

match = {"$match": {
    "booking.date": 1,
    "booking.status": True
}}
objects = docs.objects.aggregate(match)

match = {"$match": {
                "$and": [
                    {
                        "booking.date": 1,
                        "booking.status": True
                    }
                ]
            }}

有人可以指点一下吗?

您的答案是:

class Booking(EmbeddedDocument):
    date = IntField()
    status = BooleanField(default=True)

class Account(Document):
    active = BooleanField(default=True)
    booking = EmbeddedDocumentListField(Booking)

Account.objects(active=True, booking=Booking(date=1, status=True))

重点是我用整个EmbeddedDocument作为匹配条件。另外 Q(active=True) & Q(booking__date=1) & Q(booking__status=True) 完全等同于 active=True, booking__date=1, booking__status=True