sql >> Database teknologi >  >> NoSQL >> MongoDB

$in kræver et array som et andet argument, fundet:mangler

Første mulighed --> Brug aggregering

Fordi nogle af dokumenterne i din samling kan indeholde permissions felt eller er typen ikke lig med array, det er derfor, du får denne fejl.

Du kan finde $type af feltet, og hvis det ikke er et array eller ikke findes i dit dokument, kan du tilføje det som et array med $addFields og $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" ]
        }
      }
    }
  }}
])

Anden mulighed -->

Gå til din mongo-shell eller robomongo på enhver GUI, du bruger, og kør denne kommando

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



  1. nginx lua redis cookie indstilles ikke

  2. Redis, hvordan man gemmer associative array? Sæt eller Hash eller List?

  3. MongoDB Schema Design - Mange små dokumenter eller færre store dokumenter?

  4. Sådan bruger du Spring Boot med MongoDB