MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

$in изисква масив като втори аргумент, намерено:липсва

Първа опция --> Използване на агрегиране

Тъй като някои от документите ви във вашата колекция може да съдържат или да не съдържат 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" ]
        }
      }
    }
  }}
])

Втора опция -->

Отидете до вашата mongo shell или robomongo на всеки GUI, който използвате, и изпълнете тази команда

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Spring Data MongoDB Търсене с Pipeline Aggregation

  2. MongoDB премахване()

  3. MongoDB придобива mLab  –  Какви са различните алтернативи за хостинг на MongoDB?

  4. Нуждаете се от съвет за проектиране на база данни в mongodb с mongoose

  5. Node + Mongoose:Получаване на последно въведен ID?