私は少し質問があります。私は、ユーザーが投稿を好きな場所にソフトウェアを作成したい。今私は好きな人を救う方法が不思議だった。私はこのようにすることができます:MongoDB巨大な文書または複数のクエリ
{
_id:"123456789",
text:"test",
likes:[
{
username:"User1"
},
{
username:"User2"
}
]
}
私は内部の配列を持っています。しかし、私はこの投稿を照会したいと思うと、この投稿に大量の好きなものがあります。大量の配列を持つオブジェクト全体が毎回読み込まれます。そして、これは多くのパフォーマンスを必要とすると思います。利点は、私は投稿を取得することができますまた、私はこの投稿が好きかどうかをチェックします。
そして今、私は、このソリューションを持っている:
{
_id="123456789",
text:"test"
}
これは持たず好きでポストです。そして、次のような別のコレクションで:
{
_id="111111111",
username:"User1",
postId:"123456789"
}
{
_id="222222222",
username:"User2",
postId:"123456789"
}
が好きです。利点は、小さなオブジェクトを読み込むことができますが、すべてのオブジェクトのようなディスクスペースを必要とすることです。そしてあなたは私がそれを好きだった投稿と情報を1つのクエリで取得することはできません。だから、私は1つのクエリだけで行くことができない20の投稿を取得したい場合、私は21が必要になります。
それでは、それとももっと良い解決策がありますか?そして、この問題はInstagramによってどのように解決されていますか?投稿を受け取り、あなたが好きかどうかを確認してください。1M以上のお気に入りを持っています。内側の配列は巨大です。
ありがとうございました!
ありがとう、よさそうです。しかし、ユーザーの配列に投稿IDが含まれているかどうかを確認するために、$ lookupでbooleanを取得できますか?だから私は1つのクエリでそれを確認することができますか?私はそれが別のコレクションからいくつかの値を取得すると思うので、そうではありませんか? – user6586661
$ exists - https://docs.mongodb.com/manual/reference/operator/query/exists/はブール値を取得するのに役立ちます。しかし、私が知る限り、1つのクエリでは確認と更新/削除はできません。 –