sql >> Databasteknik >  >> NoSQL >> MongoDB

$in kräver en array som ett andra argument, hittat:saknas

Första alternativet --> Använd aggregering

Eftersom vissa av dokumenten i din samling kanske innehåller permissions fält eller är typen inte lika med array, det är därför du får det här felet.

Du kan hitta $type i fältet och om det inte är en array eller inte finns i ditt dokument kan du lägga till det som en array med $addFields och $cond aggregering

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

Andra alternativet -->

Gå till ditt mongo-skal eller robomongo på valfritt GUI du använder och kör detta kommando

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



  1. Hur man kontrollerar anslutningen till mongodb

  2. Vad är poängen med REDIS i ELK-stacken?

  3. De 5 bästa fördelarna med delad MongoDB-värd

  4. Hur frågar man MongoDB för att testa om en vara finns?