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
'source' 카테고리의 다른 글
Excel vba 시트 모듈에 프로그래밍 방식으로 코드 추가 (0) | 2023.07.01 |
---|---|
저장소 전체를 먼저 체크아웃하지 않고 스파스 체크아웃이 가능합니까? (0) | 2023.07.01 |
MongoDB와 Postgre 중에서 선택하는 방법GIS용 SQL? (0) | 2023.06.26 |
유형 스크립트에서 사용자 정의 유형을 올바르게 가져오는 방법 (0) | 2023.06.26 |
컨트롤러에서 양식 값을 읽는 방법은 무엇입니까? (0) | 2023.06.26 |