복붙노트

[MONGODB] 달러 것은 두 번째 인수로 배열을 필요로 발견 실종

MONGODB

달러 것은 두 번째 인수로 배열을 필요로 발견 실종

아무도 내가 잘못하고있는 중이 야 무엇을 말해 주실 래요?

DB 문서 구조 :

{
    "_id" : "module_settings",
    "moduleChildren" : [
        {
            "_id" : "module_settings_general",
            "name" : "General",
        },
        {
            "_id" : "module_settings_users",
            "name" : "Users",
        },
        {
            "_id" : "module_settings_emails",
            "name" : "Emails",
        }
    ],
    “permissions” : [
        "module_settings_general",
        "module_settings_emails"
    ]
}

파이프 라인 단계 :

{ $project: {
    filteredChildren: {
        $filter: {
           input: "$moduleChildren",
           as: "moduleChild",
           cond: { $in : ["$$moduleChild._id", "$permissions"] }
        }
    },
}}

나는 IDS는 "권한"배열에있는 경우에만 모듈을 보여 필터 "moduleChildren"배열이 필요합니다. 시도 "$$ ROOT.permissions"와 "$$ CURRENT.permissions"하지만 그들 중 누구도 작동하지 않습니다를 IVE. 난 항상에서 $가 인수로 배열 누락되는 오류가 발생합니다. 콘드 : :이 같은 배열을 하드 코딩 할 때 작동 {$에서 : [ "$$ moduleChild._id", [ "module_settings_emails"] "module_settings_general"]}는 문제가 보인다 있도록 배열의 전달입니다. 어떤 조언을 주셔서 감사합니다!

해결법

  1. ==============================

    1.첫 번째 옵션 -> 사용 집계

    첫 번째 옵션 -> 사용 집계

    귀하의 컬렉션에 문서의 일부 또는 권한 필드를 포함하거나 유형하지 않을 수 있기 때문에하지이 오류가 발생하는 이유 배열과 동일.

    이 배열이 아닌 여부를 당신이 $ COND 집계 $의 addFields으로 배열로 추가 할 수있는 것보다 문서에 존재하는 경우는 필드의 $ 유형을 찾을 수 있습니다

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

    두 번째 옵션 ->

    어떤 사용하는 GUI 및 실행에 몽고의 쉘 또는 robomongo로 이동 이 명령

    db.collection.update(
      { "permissions": { "$ne": { "$type": "array" } } },
      { "$set": { "permissions": [] } },
      { "multi": true }
    )
    
  2. from https://stackoverflow.com/questions/51642472/in-requires-an-array-as-a-second-argument-found-missing by cc-by-sa and MIT license