San*_*nde 16 javascript mongoose mongodb node.js
我在保存模型失败时出现问题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()
Run Code Online (Sandbox Code Playgroud)
系统信息如下:
? ~ 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
? ~
Run Code Online (Sandbox Code Playgroud)
请帮我梳理一下.
Teo*_*tev 28
$pushAll
Mongo 3.6.2(或3.6.x +中的任何较新版本)不再支持该运算符.
您可以执行以下操作:
usePushEach: true
Schema定义选项.Bal*_*i M 15
使用以下代码添加上述答案,以使您清楚地实现concat方法.您不需要特别降级MongoDB.
在解决此问题之前,您需要记住$ pushAll方法已被弃用了很长时间,所以他们可能会在3.5及更高版本中将其删除.
但您可以使用另一种替代方法- concat方法解决此问题.
我的旧代码,
myArray.push(id); //breaks on DocumentDB with Mongo API because of $pushAll
Run Code Online (Sandbox Code Playgroud)
已被取代,
myArray = myArray.concat([id]); //this uses $set so no problems
Run Code Online (Sandbox Code Playgroud)
甚至Azure自己的MongoDB实现也不支持$ pushAll.
谢谢.
如果有任何新的绊倒,从mongoose 5xx,usePushEach: true
删除了对模式定义中的选项的支持
您应该concat()
在附加对象时使用通常使用push的位置.如果concat()
不起作用(示例$inc
显式或隐式调用),请使用unshift()
.
小智 6
我正在使用“猫鼬”:“ ^ 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'
}] });
Run Code Online (Sandbox Code Playgroud)