source

MongoDB: 쿼리를 표준화할 수 없음: BadValue Projection에는 포함과 제외가 혼합되어 있을 수 없습니다.

ittop 2023. 5. 7. 11:52
반응형

MongoDB: 쿼리를 표준화할 수 없음: BadValue Projection에는 포함과 제외가 혼합되어 있을 수 없습니다.

저는 MongoDB에서 CakePHP를 사용하는 것이 더 새것입니다.

제가 다음 쿼리를 작성할 때 매우 잘 실행될 것입니다.

db.testData.find()
{
    "_id" : ObjectId("53d1f79db8173a625961ff3d"),
    "name" : "sadikhasan",
    "created" : ISODate("2014-07-25T06:22:21.701Z")
}

다음 쿼리를 실행하여 가져오기만 하는 경우name오류를 반환합니다.

db.testData.find({},{name:1, created:0})
error: {
    "$err" : "Can't canonicalize query: BadValue Projection cannot 
              have a mix of inclusion and exclusion.",
    "code" : 17287
}

다음 쿼리를 실행하여 가져오기만 하는 경우name와 함께_id:0그러면 잘 실행됩니다.

db.testData.find({},{name:1, _id:0})
{ "name" : "sadikhasan" }

내 질문은 내가 글을 쓸 때 왜 오류가 발생하는지입니다.created:0투영 목록에 있습니다.미리 도와주셔서 감사합니다.

포함과 제외를 혼합할 수 없습니다. 유일한 예외는_id들판.

예를 들어 다음과 같은 기능이 있습니다.

{
   "_id": ObjectId("53d1fd30bdcf7d52c0d217de"),
   "name": "bill",
   "birthdate": ISODate("2014-07-80T00:00:00.000Z"),
   "created": ISODate("2014-07-25T06:44:38.641Z")
}

"이름"과 "생년월일"만 원하는 경우 다음 작업을 수행해야 합니다.

db.collection.find({},{ "_id": 0, "name": 1, "birthdate": 1 })

또는 다음과 같습니다.

db.collection.find({},{ "_id": 0, "created": 0 })

그러나 "_id" 이외의 다른 작업은 "혼합"할 수 없습니다.

db.collection.find({},{ "_id": 0, "name": 1, "created": 0 })

오류가 발생할 수도 있습니다.

이 내용은 모두 설명서 페이지에서 다룹니다.

포함과 제외를 모두 혼합하고 있기 때문에 "쿼리를 표준화할 수 없습니다: 잘못된 값 투영에는 포함과 제외가 혼합될 수 없습니다." 오류가 발생합니다.1은 포함을, 0은 제외를 나타냅니다.쿼리에 0 또는 1을 사용할 수 있습니다.따라서 _id 및 name 필드만 표시하려면 다음 중 하나를 사용할 수 있습니다. 1) 포함:

              db.testdata.find({}, {_id:1,name:1})

또는 2) 제외:

              db.testdata.find({},{created:0})

위의 두 시나리오에서 _id 및 name 필드만 표시됩니다.

저도 같은 문제에 부딪혔습니다.즉, MongoDB에게 특정 필드를 선택하고 다른 필드를 선택 취소하도록 동시에 지시할 수 없습니다.

잘못된 것입니다. 선택 옵션 오류: -프로젝션에는 포함과 제외가 혼합될 수 없습니다.

reviewSchema.pre(/^find/, function (next) {
    this.populate({
        path: 'tour',
        select: 'name -__v'
    })
    next();
});

올바른 형식입니다.

reviewSchema.pre(/^find/, function (next) {
    this.populate({
        path: 'tour',
        select: 'name' // Removed -__v
    })
    next();
});

솔루션을 설명하기 위해 간단한 단어로 MongoDB에 원하는 모든 필드 또는 MongoDB에서 원하지 않는 필드를 알려줄 수 있습니다.

즉, 선택 방법에서 필수 또는 필수가 아닌 필드만 언급하면 됩니다.아래와 같이

find({<!--query here--!>}).select({

        password: 0,
        allowed_ip: 0,
        username: 0,
        password: 0,
        __v: 0,
        _id: 0
    });

0(제외/필수) 또는 1(포함/필수 필드) 환호여야 합니다!!!

언급URL : https://stackoverflow.com/questions/24949544/mongodb-cant-canonicalize-query-badvalue-projection-cannot-have-a-mix-of-incl

반응형