機能をリクエストしバグを報告しますか?
バグを報告
現在の動作は何ですか?
ローカルマシンでテストに合格しましたが、まったく同じバージョンのjenkinsサーバーで失敗しました。 唯一の違いは、ローカルはmacosであり、jenkinsは私が知る限りubuntuです。
MacOS Sierra、ノード8.4および7.11、mongodb 3.4.7、およびmongoose 4.11.7では、次のテストに合格しますが、ubuntu16.04サーバーでまったく同じバージョンのjenkinsサーバーでは失敗します。
it("should successfully allow an alias that matches a service", async () => {
const aliasTag = "this is a test";
const appAlias = await AliasController.create(user, appAliasSpec);
const serviceAlias = await AliasController.create(user, serviceAliasSpec);
appAlias.aliases.push(aliasTag);
await appAlias.save(); // This is the line that fails in jenkins
serviceAlias.aliases.push(aliasTag);
await serviceAlias.save();
const confAppAlias = await AliasController.getById(appAlias._id);
const confServiceAlias = await AliasController.getById(serviceAlias._id);
expect(confAppAlias.aliases[1]).to.equal(aliasTag);
expect(confServiceAlias.aliases[1]).to.equal(aliasTag);
});
これが私が得ている正確なエラーです:
{
"message": "Unknown modifier: $pushAll",
"name": "MongoError",
"stack": "MongoError: Unknown modifier: $pushAll\n at Function.MongoError.create (/var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb-core/lib/error.js:31:11)\n at toError (/var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb/lib/utils.js:139:22)\n at /var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb/lib/collection.js:1060:67\n at /var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb-core/lib/connection/pool.js:469:18\n at _combinedTickCallback (internal/process/next_tick.js:131:7)\n at process._tickCallback (internal/process/next_tick.js:180:9)",
"code": 9
}
編集:これはスタックトレースのより読みやすいバージョンです
MongoError: Unknown modifier: $pushAll
at Function.MongoError.create (/var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb-core/lib/error.js:31:11)
at toError (/var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb/lib/utils.js:139:22)
at /var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb/lib/collection.js:1060:67
at /var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb-core/lib/connection/pool.js:469:18
at _combinedTickCallback (internal/process/next_tick.js:131:7)
at process._tickCallback (internal/process/next_tick.js:180:9)
mongoose.set('debug', true)
を実行して、mongo出力を貼り付けることはできますか?
編集:より明確な出力
Mongoose: aliases.update({ _id: ObjectId("599d98122b72d12e0ba858b4") }, { '$pushAll': { aliases: [ 'this is a test' ] }, '$set': { updatedAt: new Date("Wed, 23 Aug 2017 14:58:26 GMT") }, '$inc': { __v: 1 } })
{"name":"davis","hostname":"ld-ub-bm980a98v","pid":11787,"level":50,"err":{"message":"Unknown modifier: $pushAll","name":"MongoError","stack":"MongoError: Unknown modifier: $pushAll
at Function.MongoError.create (/var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb-core/lib/error.js:31:11)
at toError (/var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb/lib/utils.js:139:22)
at /var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb/lib/collection.js:1060:67
at /var/lib/jenkins/workspace/davis-cloudcontrol/node_modules/mongodb-core/lib/connection/pool.js:469:18
at _combinedTickCallback (internal/process/next_tick.js:131:7)
at process._tickCallback (internal/process/next_tick.js:180:9)","code":9},"msg":"An unhandled Mongo error occurred.","time":"2017-08-23T14:58:26.201Z","v":0}
価値があるかどうかについては、ローカルの開発環境と本番環境でデバッグ出力を確認しましたが、どちらも$ pushAll修飾子を正常に使用しています。 Mongoは、すべての場合に公式パッケージからインストールされます。 開発マシンはWindowsとMacOSであり、本番マシンはamazonlinuxです。
mongoシェルを使用してjenkinsmongodbインスタンスに接続し、 db.version
を使用してバージョンを再確認できますか?
$ mongo test
MongoDB shell version v3.4.1
connecting to: mongodb://127.0.0.1:27017/test
MongoDB server version: 3.4.1
> db.version()
3.4.1
> ^C
bye
mongooseを使用してserverStatus()
コマンドを使用して、サーバーのバージョンを出力することもできます。
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/test');
mongoose.connection.on('open', function() {
mongoose.connection.db.admin().serverStatus(function(error, info) {
console.log(info.version);
});
});
最初にバージョンを再確認してください。公式パッケージはすぐに古くなる傾向があります。
うん、同じエラーがあります。 3.2から3.5に移行しようとしました(データ移行なし)。 配列フィールドがあります
'liked': {
'item':[ {
'id': {'type': Types.ObjectId, 'ref': 'Item'},
'score': {'type': Number, 'max': 100, 'default': -1},
'comment': {'type': String, 'maxlength': 65000, 'trim': true, 'default': '', 'set': san.methods.safe}
} ]
},
id
は最適なフィールド名ではありませんが、3.2で機能しました。 3.5では、アイテムが配列にプッシュされた後にドキュメントを.save()
しようとすると、失敗します。 .push()
を介してアイテムをプッシュし、フィールド.markModified('liked.item');
マークします。 簡単なはずです。
MongoDB 3.5?
はい
targetMinOS: Windows 7/Windows Server 2008 R2
db version v3.5.13
git version: 52bbaa007cd84631d6da811d9a05b59f2dfad4f3
OpenSSL version: OpenSSL 1.0.1u-fips 22 Sep 2016
allocator: tcmalloc
modules: none
build environment:
distmod: 2008plus-ssl
distarch: x86_64
target_arch: x86_64
これが1つの問題です。mongodb3.5は不安定な開発リリースであるため、使用しないでください。 $ pushAllは長い間非推奨になっているため、3.5で削除された可能性があります。 @mbroadst明確にできますか?
しばらく前にこれを回避するためにusePushEach
オプションを追加しました: https :
new Schema({ arr: [String] }, { usePushEach: true });
@ vkarpov15はい、 featureCompatibilityVersion=3.6
削除されました
Touche。 その場合は、必ず#5670を入手してください。
私はubuntuでmongodbv3.6を使用しているのとまったく同じ問題を抱えています。 pushAllがdbから削除された場合、インスタンスを保存する方法よりも..代替手段を提供してください
@rankitbishnoiオプションの各スキーマ定義にusePushEach
オプションを追加することで、これを一時的に回避できます。
@ vkarpov15素晴らしいライブラリサーに感謝します。
私も、Mongoose4.13.7とMongoDB3.6.0でこの問題が発生しています。
更新:モデルのスキーマオプションにusePushEach: true
を追加すると、これが解決されました。
@ dyladan @ chaddjohnsonは本当に機能します。
どうもありがとう!
どうすればこれを行うことができますか? これをスキーマオプションに追加するにはどうすればよいですか? ありがとう!
@ raphaelbp12スキーマオプションの使用に関するドキュメントは次のとおりです: http : //mongoosejs.com/docs/guide.html
スキーマを更新しても、この動作は変わりません。 3.6では、データベース内の古いデータでは機能しません。
編集:バージョン3.4に戻すと、問題が解決しました。
自分のマシンでコードを実行するときに同様の問題が発生していました。 Mongoose5とMongoDB3.6のおかげだと思います。 元に戻してみてください:
npm install [email protected] --save
)、およびdb.version()
入力してバージョンを確認できます)。それは私のために働いた! :)
Mongoose 5は、この問題の影響を受けないはずです。 $pushAll
どこにも使用されません。 マングース5でこのエラーが発生した場合は、コードサンプルの問題を開いてください:+1:
PS C:\ Users \ paula \ projetos \ apiNode \ src>ノードindex.js
{MongoError:不明な修飾子:$ pushAll
Function.MongoError.create(C:\ Users \ paula \ projetos \ apiNode \ node_modules \ mongodb-core \ lib \ error.js:31:11)
toErrorで(C:\ Users \ paula \ projetos \ apiNode \ node_modules \ mongodb \ lib \ utils.js:139:22)
C:\ Users \ paula \ projetos \ apiNode \ node_modules \ mongodb \ lib \ collection.js:1059:67
C:\ Users \ paula \ projetos \ apiNode \ node_modules \ mongodb-core \ lib \ connection \ pool.js:469:18にあります
_combinedTickCallback(internal / process / next_tick.js:131:7)で
process._tickCallback(internal / process / next_tick.js:180:9)で
名前: 'MongoError'、
メッセージ: '不明な修飾子:$ pushAll'、
ドライバー:本当、
インデックス:0、
コード:9
みなさん、こんにちは。エラーの修正方法を教えてください不明な修飾子:$ pushAll
Пробовалвоттакнеработает
const mongoose = require( 'mongoose')
constСхема= mongoose.Schema
const UserSchema =新しいスキーマ({
telegramId:{
タイプ:番号、
必須:true、
usePushEach:true
}、
映画:{
タイプ:[文字列]、
ディフォルト: []
}
})
mongoose.model( 'users'、UserSchema)
@ rivers-lis次のように、スキーマではなくスキーマオプションにusePushEach
を追加する必要があります。
new Schema({ ... }, { usePushEach: true });
Кактовоттак
const mongoose = require( 'mongoose')
const Schema = mongoose.Schema
const UserSchema = new Schema({
telegramId:{
タイプ:番号、
必須:true
}、
films: {
type: [String],
default: []
}
})
new Schema({}、{usePushEach:true})
mongoose.model( 'users'、UserSchema)
new Schema({ ... }, { usePushEach: true });
これにより、バージョン4.4.12および5.0.7でもエラーが解決されます。
Кактовоттак
const mongoose = require( 'mongoose')
const Schema = mongoose.Schemaconst UserSchema = new Schema({
telegramId:{
タイプ:番号、
必須:true
}、films: { type: [String], default: [] }
})
new Schema({}、{usePushEach:true})
mongoose.model( 'users'、UserSchema)
申し訳ありませんがロシア語を読むことができません
@DanGDroidは大まかに「Кактовоттак」を翻訳しました->「このようなもの」
最も参考になるコメント
これが1つの問題です。mongodb3.5は不安定な開発リリースであるため、使用しないでください。 $ pushAllは長い間非推奨になっているため、3.5で削除された可能性があります。 @mbroadst明確にできますか?
しばらく前にこれを回避するために
usePushEach
オプションを追加しました: https :