0

私のアプリケーションには、 と を含む複数のレコードがusernameありdomainます。以前は、versionフィールドの値が異なる場合にすべてのレコードを保持していましたが、現在はすべてを 1 つのバージョンに置き換えたいと考えています。

たとえば、次のような構造のデバイス コレクションがあります。

{
    username: me,
    domain: stackoverflow.com,
    version: 1
}
{
    username: me,
    domain: stackoverflow.com,
    version: 2
}

そして、新しいバージョンがあるたびにアップサートを続けました。

そして今、既存のすべてのドキュメントを置き換えるレコードを 1 つだけにしたいと考えています。新しいバージョンの新しいドキュメントがupsert編集されるたびに、ユーザー名とドメインに一致するすべてのレコードが削除され、新しいものにマージされます。

オプションを試しupsert: trueてみmulti: trueましたが、古いレコードは削除されません。どんな助けでも素晴らしいでしょう。

4

2 に答える 2

1

Upsert古いレコードは削除されません。置換または新規作成しかできません。(アップサートのドキュメント)

古いデータを手動でクリーンアップする必要があります。いくつかのオプションがあります:

  1. 以前はドキュメントの新しいものだったものに遭遇するまで待ってから、新しいversionバージョンを保存する前にすべてのバージョンを削除してください。(古いものをクリーンアップしてから、新しいものを置きます)。
  2. 集計フレームワークを使用してグループ化しusernamedomainすべての組み合わせのリストを返します。次に、組み合わせごとに、最新のものを除くすべてを削除します (最高のものを取得するために並べ替えてから、最高のバージョン番号以外のすべてに一致するすべてを削除するためにversion使用するクエリを実行できます)。$neこれはデータベースに大きな打撃を与えますが、一度だけ実行する必要があります。
  3. お気に入りのプログラミング言語でデータを手動でフィルター処理し、データを新しいコレクションに移動します。繰り返しますが、遅いですが、一度だけ実行します。
于 2013-09-10T01:17:59.533 に答える