sql >> データベース >  >> NoSQL >> MongoDB

mongodbの集計クエリによって返されたドキュメントを削除する方法

    削除以降 集計結果に関係なく、すべてのドキュメントと一致して削除されるクエリ条件はありません。

    解決策 (現在のカーソルドキュメントのIDと一致します):

    db.getCollection("Collection")
      .aggregate([
        {
          $match: { status: { $in: ["inserted", "done", "duplicated", "error"] } }
        },
        {
          $project: {
            yearMonthDay: { $dateToString: { format: "%Y-%m-%d", date: "$date" } }
          }
        },
        { $match: { yearMonthDay: { $eq: "2019-08-06" } } }
      ])
      .forEach(function(doc) {
        db.getCollection("Collection").remove({ "_id": doc._id });
      });
    

    もう1つのより良い解決策 削除が集約からIDのリストを取得している間、dbへの単一のラウンドトリップがあります cursor() cursor.map()

    var idsList = db
      .getCollection("Collection")
      .aggregate([
        {
          $match: { status: { $in: ["inserted", "done", "duplicated", "error"] } }
        },
        {
          $project: {
            yearMonthDay: { $dateToString: { format: "%Y-%m-%d", date: "$date" } }
          }
        },
        { $match: { yearMonthDay: { $eq: "2019-08-06" } } }
      ])
      .map(function(d) {
        return d._id;
      });
    
    //now delete those documents via $in operator
    db.getCollection("Collection").remove({ _id: { $in: idsList } });
    


    1. TypeError:「in」演算子を使用して男性の「_id」を検索することはできません

    2. Java3.0ドライバーでMongoDB認証を確認する

    3. RリストをJSONに変換する

    4. SpringデータキャッシュでRedisを使用するときに分散/クラスター化キャッシュを有効にする方法