在 mongoengine EmbeddedDocumentListField 中分组
Group By in mongoengine EmbeddedDocumentListField
你好所以我在 mongo 中有这个测试数据用于 mongo 我用来存储用户购物车的引擎:
{
"_id" : ObjectId("55e492ac516ddc17a8b07d2a"),
"user" : ObjectId("55e3f236516ddc78296968be"),
"items" : [
{
"item" : ObjectId("55e24cd6516ddcbdc081842b"),
"quantity" : 2,
"added_date" : ISODate("2015-08-31T17:44:49.023Z")
},
{
"item" : ObjectId("55e24cd6516ddcbdc0818425"),
"quantity" : 3,
"added_date" : ISODate("2015-08-31T17:44:49.025Z")
},
{
"item" : ObjectId("55e24cd6516ddcbdc0818420"),
"quantity" : 3,
"added_date" : ISODate("2015-08-31T17:44:49.026Z")
}
]
}
这里是模型:
class CartItem(mongoengine.EmbeddedDocument):
item = mongoengine.ReferenceField('Item')
quantity = mongoengine.IntField()
added_date = mongoengine.DateTimeField(default=datetime.now())
class Cart(mongoengine.Document):
user = mongoengine.ReferenceField('User')
items = mongoengine.EmbeddedDocumentListField(CartItem)
这里我将商品存储在用户的购物车中。现在我想获取项目列表字段中的所有唯一项目,因为会有重复的项目。
我执行以下查询来获取项目:
cart = Cart.objects.filter(user=user).first()
queryset = cart.items
在这种情况下,我认为我必须对项目进行分组,我尝试在过滤器中使用原始查询:cart.items.filter(__raw__...)
但这不起作用,因为在这种情况下不支持原始查询。有人可以帮助我如何做到这一点吗?谢谢!
您可以使用.distinct()
获取items
的所有唯一值,而不是groupby
。
Return a list of distinct values for a given field.
您需要执行以下操作:
unique_items = Cart.objects.filter(user=user).first().distinct('items')
这将 return 特定用户的购物车中的唯一 items
列表。
编辑:
如果您想要 items
嵌入文档字段内的 item
字段的唯一列表,则需要使用点 .
转到该字段。
Cart.objects.filter(user=user).first().distinct('items.item')
你好所以我在 mongo 中有这个测试数据用于 mongo 我用来存储用户购物车的引擎:
{
"_id" : ObjectId("55e492ac516ddc17a8b07d2a"),
"user" : ObjectId("55e3f236516ddc78296968be"),
"items" : [
{
"item" : ObjectId("55e24cd6516ddcbdc081842b"),
"quantity" : 2,
"added_date" : ISODate("2015-08-31T17:44:49.023Z")
},
{
"item" : ObjectId("55e24cd6516ddcbdc0818425"),
"quantity" : 3,
"added_date" : ISODate("2015-08-31T17:44:49.025Z")
},
{
"item" : ObjectId("55e24cd6516ddcbdc0818420"),
"quantity" : 3,
"added_date" : ISODate("2015-08-31T17:44:49.026Z")
}
]
}
这里是模型:
class CartItem(mongoengine.EmbeddedDocument):
item = mongoengine.ReferenceField('Item')
quantity = mongoengine.IntField()
added_date = mongoengine.DateTimeField(default=datetime.now())
class Cart(mongoengine.Document):
user = mongoengine.ReferenceField('User')
items = mongoengine.EmbeddedDocumentListField(CartItem)
这里我将商品存储在用户的购物车中。现在我想获取项目列表字段中的所有唯一项目,因为会有重复的项目。
我执行以下查询来获取项目:
cart = Cart.objects.filter(user=user).first()
queryset = cart.items
在这种情况下,我认为我必须对项目进行分组,我尝试在过滤器中使用原始查询:cart.items.filter(__raw__...)
但这不起作用,因为在这种情况下不支持原始查询。有人可以帮助我如何做到这一点吗?谢谢!
您可以使用.distinct()
获取items
的所有唯一值,而不是groupby
。
Return a list of distinct values for a given field.
您需要执行以下操作:
unique_items = Cart.objects.filter(user=user).first().distinct('items')
这将 return 特定用户的购物车中的唯一 items
列表。
编辑:
如果您想要 items
嵌入文档字段内的 item
字段的唯一列表,则需要使用点 .
转到该字段。
Cart.objects.filter(user=user).first().distinct('items.item')