0

私は使用django-nonrelしていますdjango-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 way」とは、著者の詳細とすべてのコメントを埋め込みドキュメントに埋め込むことだと思います。関連する複数のコレクション (テーブル) を持つことは、この問題を解決する最善の方法ではありません。

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

これらの 2 つのエンジンを混在させることは不可能です。これについての最も簡単な説明は、MongoDB の主キーは文字列のようなオブジェクトであり、*SQL pk は整数であるということです。両方を使用することはできません。どちらかを選択してください。

于 2011-02-05T21:21:14.677 に答える