source

MongoError: 노드 js에서 알 수 없는 수식어: $pushAll

ittop 2023. 7. 1. 09:58
반응형

MongoError: 노드 js에서 알 수 없는 수식어: $pushAll

mongo 오류: MongoError: Unknown modifier: $pushAll로 모델 저장에 실패했을 때 문제가 발생했습니다.

필드가 .subDomains다음과 같이 하위 도메인으로 기본 저장됩니다.

 // already Domain instance get availble 
 Domain.subDomains.push({'name': 'default' , 'role': 'xyz', ...});

 // save domain with default fileds
 Domain.save() 

시스템 정보는 다음과 같습니다.

         ➜  ~ node --version
          v9.4.0
          ➜  ~ npm --version
          5.6.0
          ➜  ~ 
          ➜  ~ mongo --version
            MongoDB shell version v3.6.2
            git version: ......
            OpenSSL version: OpenSSL 1.0.2n  7 Dec 2017
            allocator: system
            modules: none
            build environment:
                distarch: x86_64
                target_arch: x86_64
          ➜  ~ 

이것을 정리하는 것을 도와주세요.

$pushAll연산자는 Mongo 3.6.2(또는 3.6.x+의 최신 버전)에서 더 이상 지원되지 않습니다.

다음 작업을 수행할 수 있습니다.

  • 다음과 같이 스키마 정의 옵션을 추가합니다.

    new mongoose.Schema({
      username: String
    }, {
      usePushEach: true
    });
    
  • Mongo 3.4.11(또는 모든 3.4.x 버전)로 다운그레이드

위의 답변에 다음 코드를 추가하여 concat 방법을 구현하는 데 있어 명확성을 제공합니다.특별히 MongoDB를 다운그레이드 할 필요는 없습니다.

이 문제를 해결하기 전에 $pushAll 메서드는 오랫동안 사용되지 않아 버전 3.5 이상에서 제거될 수 있습니다.

그러나 다른 대안인 concat 방법으로 이 문제를 해결할 수 있습니다.

내 예전 코드는,

myArray.push(id); //breaks on DocumentDB with Mongo API because of $pushAll

다음으로 대체되었습니다.

myArray = myArray.concat([id]); //this uses $set so no problems

Azure의 자체 MongoDB 구현조차도 $pushAll을 지원하지 않습니다.

감사해요.

mongoose 5xx에서 새로운 사람이 이것에 대해 방해가 될 경우, 지원.usePushEach: true되었습니다.

에 대신다사합야니다해용을음을 사용해야 .concat()개체를 추가할 때 일반적으로 푸시를 사용하는 위치입니다.다음과 같은 경우concat()하지 않음((관이에계없치동example위)이▁where)$inc암시적으로 됩니다) 사용합니다.unshift().

저는 "mongoose"를 사용하고 있습니다: "^4.12.1"과 .push를 사용하면 동일한 오류가 발생했습니다.usePushEach저한테는 효과가 있어요. 켤 수 . : 음과같모스대에해수설있다습니정할다마키든.

const mongoose = require('mongoose');
mongoose.plugin(schema => { schema.options.usePushEach = true });
const Schema = mongoose.Schema; 
const SampleSchema = new Schema({
    attr1: type,
    attr2: type,
    attr2: type,
    attr4: [{
        type: Schema.Types.ObjectId,
        ref: 'ref_table_name'
    }] });

교를(를) 대체하는 중.push와 함께.unshift이 오류를 처리하는 가장 좋은 방법입니다.이것이 당신의 하루를 구하길 바랍니다.

> 3.6을 사용하는 경우.하지만 만약 당신이 그것을 작동시키고 싶다면, 당신은 사용할 수 있습니다.$push $each효과가 있을 겁니다.

콘캣을 사용하여 문제를 해결합니다.

 var newArray=  Domain.subDomains.concat([{'name': 'default' , 'role': 'xyz'}]) 
      Domain.subDomains=newArray
      Domain.save()

.push()를 .unshift()로 바꿉니다.

해라

Domain._doc.subDomains.push({'name': 'default' , 'role': 'xyz', ...});

이것은 나에게 효과가 있습니다.

언급URL : https://stackoverflow.com/questions/48607918/mongoerror-unknown-modifier-pushall-in-node-js

반응형