集計パイプラインを使用して、重複したレコードをグループ化できます:
db.theCollection.aggregate([
{$group: {_id: {item: "$item", qty: "$qty", size: "$size", status: "$status"}}},
{$project: {_id: 0, item: "$_id.item", qty: "$_id.qty", size: "$_id.size", status: "$_id.status"}},
{$out: "theCollectionWithoutDuplicates"}
])
集約パイプラインの実行後、theCollectionWithoutDuplicates
コレクションには、元の複製されたドキュメントの各グループのドキュメントと、新しい_id
が含まれています。 -元のコレクションを削除して、出力を確認できます(db.theCollection.drop()
)、新しいコレクションの名前を変更します(db.theCollectionWithoutDuplicates.renameCollection('theCollection')
)。ドロップと名前変更は、db.theCollectionWithoutDuplicates.renameCollection('theCollection', true)
で組み合わせることができます 。
集約パイプラインの使用法の説明:
-
db.theCollection.aggregate([])
集計パイプラインを実行し、実行する集計ステージのリストを受け取ります -
$group
ステージは、後続の_id
として指定されたフィールドごとにドキュメントをグループ化します フィールド -
$project
ステージはフィールド名を変更し、ネストされた_id
をフラット化します$group
によって作成されたサブドキュメント -
$out
ステージは、集計結果のドキュメントを特定のコレクションに保存します