MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

$in nécessite un tableau comme deuxième argument, trouvé :manquant

Première option --> Utiliser l'agrégation

Parce que certains des documents de votre collection peuvent ou non contenir des permissions le champ ou le type n'est pas égal au tableau, c'est pourquoi vous obtenez cette erreur.

Vous pouvez trouver le $type du champ et s'il ne s'agit pas d'un tableau ou n'existe pas dans votre document, vous pouvez l'ajouter en tant que tableau avec $addFields et $cond agrégation

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

Deuxième option -->

Accédez à votre shell mongo ou robomongo sur n'importe quelle interface graphique que vous utilisez et exécutez cette commande

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