MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

$in benötigt ein Array als zweites Argument, gefunden:fehlt

Erste Option --> Aggregation verwenden

Weil einige der Dokumente in Ihrer Sammlung permissions enthalten können oder auch nicht Feld oder Typ ist nicht gleich Array, deshalb erhalten Sie diesen Fehler.

Sie finden den $type des Felds und wenn es kein Array ist oder in Ihrem Dokument nicht vorhanden ist, können Sie es mit $addFields als Array hinzufügen und $cond Aggregation

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" ]
        }
      }
    }
  }}
])

Zweite Option -->

Gehen Sie zu Ihrer Mongo-Shell oder Robomongo auf einer beliebigen GUI, die Sie verwenden, und führen Sie diesen Befehl

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