小编Naz*_*riy的帖子

Group in in mongoengine EmbeddedDocumentListField

嗨所以我在mongo中使用mongoengine测试数据用于存储用户的购物车:

{
    "_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")
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

这里的模型:

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)
Run Code Online (Sandbox Code Playgroud)

在这里,我将项目存储在用户的购物车中.现在我想获取项目列表字段中的所有唯一项目,因为会有重复的项目.

我执行以下查询来获取项目:

cart = Cart.objects.filter(user=user).first()
queryset = cart.items
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我认为我必须对项目进行分组,我尝试在过滤器中使用原始查询:cart.items.filter(__raw__...) 但这不起作用,因为在这种情况下不支持raw.有人可以帮助我如何做到这一点?谢谢!

python django mongodb mongoengine embedded-documents

8
推荐指数
1
解决办法
1391
查看次数

按 mongo 中日期时间字段中的日期排序

我将 django 与 mongo 一起使用,我有这种类型的模型:

class ProductDate(EmbeddedDocument):
    created = DateTimeField()
    updated = DateTimeField(null=True)

class Product(Document):
    product_id = IntField()
    saves = IntField(default=0)

    title = StringField(max_length=1000)
    gender = StringField(choices=settings.GENDER_CHOICES, default=settings.UNISEX, max_length=50)
    date = EmbeddedDocumentField(ProductDate)
Run Code Online (Sandbox Code Playgroud)

现在,当我进行这样的查询时:

queryset = queryset.filter(title=search)
Run Code Online (Sandbox Code Playgroud)

我想首先按创建的日期时间字段中的日期排序,然后按保存排序。这样,具有相同日期而不是时间的产品将按保存次数排序。但是,我似乎找不到将硅藻土转换为日期的方法,以便它仅比较日期。

我不能这样做:

.order_by("-date__created","-saves")
Run Code Online (Sandbox Code Playgroud)

因为这是根据时间排序的。

我尝试在 mongo 中使用聚合,通过本教程:

http://www.codewrecks.com/blog/index.php/2014/10/13/aggregate-in-mongo-using-only-date-part-of-a-datetime-property/

但这对我没有帮助。

有人可以指导我如何做到这一点吗?谢谢你!

django datetime mongodb mongoengine django-rest-framework

5
推荐指数
1
解决办法
2897
查看次数

在 Django 迁移中删除对 BaseClass 的引用

我有以下型号。

class ReservedSlug(models.Model):
    slug = models.SlugField(
        max_length=80,
        unique=True,
    )

class SubClass(ReservedSlug):
    name = models.CharField(
        max_length=100,
    )
Run Code Online (Sandbox Code Playgroud)

现在数据库中发生的事情是 SubClass 与以下 ReservedSlug 基类有外键关系:

CONSTRAINT reservedslug_ptr_id_f48f6b16_fk_utils_reservedslug_id FOREIGN KEY (reservedslug_ptr_id)
    REFERENCES public.utils_reservedslug (id) MATCH SIMPLE
    ON UPDATE NO ACTION
    ON DELETE NO ACTION
    DEFERRABLE INITIALLY DEFERRED
Run Code Online (Sandbox Code Playgroud)

同时,它将主键设置为以下内容:

CONSTRAINT subclass_newsubclass_pkey PRIMARY KEY (reservedslug_ptr_id),
Run Code Online (Sandbox Code Playgroud)

我的目标是一起删除对 Reserved slug 的引用,并且让 reservedslug_ptr_id 成为 SubClass 模型中的 IntegerField。

这是我在迁移中尝试过的方法之一:

database_operations = [ 
    migrations.AlterField(
        model_name="subclass",
        name="reservedslug_ptr_id",
        field = models.ForeignKey('reservedslug_ptr_id', db_constraint=False, db_index=True, null=False)

    )

]

state_operations = [
    migrations.AlterField(
        model_name='subclass',
        name='reservedslug_ptr',
        field=models.IntegerField(db_index=True, null=False), …
Run Code Online (Sandbox Code Playgroud)

python django postgresql django-models

5
推荐指数
0
解决办法
338
查看次数

合并列表列表并循环返回

我试图将所有列表列表合并为一个.

到目前为止,这是我的代码:

(DEFUN DESCRIPTION (BLOCK)
    (loop initially (setf result '())
        for desc in (DESC2 BLOCK) 
        do (append result desc)
        finally (return result)
        )
)
Run Code Online (Sandbox Code Playgroud)

函数(DESC2 BLOCK)返回以下内容:

((SHAPE BRICK) (COLOR GREEN) (SIZE SMALL) (SUPPORTED-BY B2) (SUPPORTED-BY B3))
Run Code Online (Sandbox Code Playgroud)

我只需要函数返回一个合并列表:

(SHAPE BRICK COLOR GREEN SIZE SMALL SUPPORTED-BY B2 SUPPORTED-BY B3)
Run Code Online (Sandbox Code Playgroud)

我已经尝试了很多方法并且已经研究了很多.我很抱歉,但我不完全了解LISP语言,如果你能帮助我,我将不胜感激!

先感谢您!

lisp merge list common-lisp

0
推荐指数
1
解决办法
65
查看次数