0

我正在使用django-nonreldjango-mongodb-engine

我有一个存储在PostgreSQL上的 Django 模型:

class Author(models.Model):
    name = models.CharField(max_length=100)
    created = models.DateTimeField(auto_now_add=True)

我有一个MongoDB存储模型:

class Post(models.Model):
    title = models.CharField(max_length=100)
    body = models.TextField()
    created = models.DateTimeField(auto_now_add=True)

    author = models.ForeignKey(Author)

每当我尝试按作者 ID 过滤帖子时:

posts = Post.objects.filter(author__id=1)

我收到以下错误:

/usr/local/lib/python2.6/dist-packages/bson/objectid.pyc in __validate(self, oid)
    158                     raise InvalidId("%s is not a valid ObjectId" % oid)
    159             else:
--> 160                 raise InvalidId("%s is not a valid ObjectId" % oid)
    161         else:
    162             raise TypeError("id must be an instance of (str, ObjectId), "

InvalidId: 1 is not a valid ObjectId

In [22]: Post.objects.filter(author__id=1)

有任何想法吗?

4

3 回答 3

2

我相信“mongo 方式”是将作者详细信息以及所有评论嵌入到嵌入式文档中。在您的情况下,拥有多个相关集合(表)并不是解决此问题的最佳方法。

尽可能减少foreignKey的使用,只嵌入数据。我相信 MongoEngine 有一个可以继承的 Document 和 EmbeddedDocument 类。

为什么要使用 mongodb 与 mysql?你必须有一个巨大的博客... ;-)

于 2011-01-31T19:15:08.007 回答
0

或许:

author = Author.objects.get(pk=1)
posts = author.post_set.all()
于 2011-01-31T19:58:04.697 回答
-1

It's impossible to mix those two engines. The simplest explanation for this is that MongoDB primary keys are string-like objects and *SQL pks are integers. You can't use both, chose one.

于 2011-02-05T21:21:14.677 回答