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

$ inには、2番目の引数として配列が必要です。

    最初のオプション ->集計を使用

    コレクション内の一部のドキュメントには、permissionsが含まれる場合と含まれない場合があるためです。 フィールドまたはタイプが配列と等しくないため、このエラーが発生します。

    $typeを見つけることができます フィールドの配列であり、それが配列ではないか、ドキュメントに存在しない場合は、 $addFieldsを使用して配列として追加できます。 および$cond 集約

    db.collection.aggregate([
      { "$addFields": {
        "permissions": {
          "$cond": {
            "if": {
              "$ne": [ { "$type": "$permissions" }, "array" ]
            },
            "then": [],
            "else": "$permissions"
          }
        }
      }},
      { "$project": {
        "filteredChildren": {
          "$filter": {
            "input": "$moduleChildren",
            "as": "moduleChild",
            "cond": {
              "$in": [ "$$moduleChild._id", "$permissions" ]
            }
          }
        }
      }}
    ])
    

    2番目のオプション ->

    使用しているGUIでmongoシェルまたはrobomongoに移動し、このコマンドを実行します

    db.collection.update(
      { "permissions": { "$ne": { "$type": "array" } } },
      { "$set": { "permissions": [] } },
      { "multi": true }
    )
    



    1. シンプルなパスワード認証で設定されたMongoDBレプリカ

    2. MongoDBにMMAPv1ストレージエンジンを引き続き使用する必要がある理由

    3. 配列mongodb内のネストされた配列を更新しています

    4. $ lookupmongodbまたはnodejsmongodbを使用して、複数のコレクションを1つのコレクションに組み合わせるにはどうすればよいですか?