设计Django MongoDB Engine外键列表

时间:2012-03-14 02:14:56

标签: python database-design mongodb django-nonrel non-relational-database

当我们使用Django MongoDB Engine实现ManyToManyField时, 我们可以设计如下:

# Model and its field
class Group(models.Model):
    members = ListField(models.ForeignKey(User))

# Query
Group.objects.raw_query({'members': ObjectId(request.user.id)})

上面的一个会将字段“members”存储为mongodb中的Mongodb ID列表。与"members" : [ ObjectId("4e46434741b6994c70000000") ]

一样

我们还可以将MongoDB id存储为字符串:

# Model and its field
class Group(models.Model):
    members = ListField(models.CharField(max_length=24))

# Query
Group.objects.filter(members=request.user.id)

上面的那个将把字段“members”存储为mongodb中的字符串列表。喜欢 "members" : [ "4e46434741b6994c70000000" ]

我的问题是,这些结构中哪一种对于mongodb查询更有效?

1 个答案:

答案 0 :(得分:2)

外键蔑视。您指向的模型将使用objectid作为_id,因此通过将关系存储为字符串,您需要为列表中的每个项目从字符串转换为objectId。