Mongoose: エラー:循環依存が検出されました

作成日 2018年02月08日  ·  40コメント  ·  ソース: Automattic/mongoose

macOSで最新バージョンのNode.jsを実行します。 また、最新バージョンのマングースを実行しています。

文字通りデバッグする方法がないError: cyclic dependency detectedを見る。 すべてがマングースを指しています。 助言がありますか? 今日から起こり始めました。

/Users/nickparsons/Code/winds-2.0/api/src/node_modules/mongoose/lib/utils.js:417
        throw err;
        ^

Error: cyclic dependency detected
    at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:296:33)
    at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:776:17)
    at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:308:18)
    at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:776:17)
    at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:308:18)
    at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:776:17)
    at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:308:18)
    at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:776:17)
    at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:308:18)
    at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:776:17)
    at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:308:18)
    at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:776:17)
    at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:308:18)
    at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:776:17)
    at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:308:18)
    at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:776:17)
    at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:308:18)
    at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:776:17)
    at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:308:18)
    at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:618:17)
    at serializeObject (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:308:18)
    at serializeInto (/Users/nickparsons/Code/winds-2.0/api/src/node_modules/bson/lib/bson/parser/serializer.js:776:17)
confirmed-bug underlying library issue

最も参考になるコメント

確認できます- retryWrites削除すると、「古い」 mongodb:// URIを使用しても、問題は解決しました。

全てのコメント40件

ここでの元の問題は何でしたか?

オブジェクト全体ではなく、更新が必要なフィールドを含めるようにしてください。

私もこの問題を抱えています。同じコード行です。
C:\ Users \ Rowan \ Onedrive \ code \ react \ gradeable \ frontendnode_modules \ mongoose \ lib \ utils.js:417
エラーをスローします。

@ nparsons08Ping 。 それがあなたの側の問題であることが判明したのか、回避策を見つけたのか(以前のマングースバージョンへのダウングレード以外)、または別の方法で解決したのかを教えてください。

ここでも同じで、追跡する方法はまったくありません。

エラーが発生したり消えたりします。

image

Error: cyclic dependency detected at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:296:33) at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:776:17) at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:308:18) at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:776:17) at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:308:18) at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:776:17) at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:308:18) at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:776:17) at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:308:18) at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:776:17) at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:308:18) at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:776:17) at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:308:18) at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:776:17) at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:308:18) at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:776:17) at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:308:18) at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:776:17) at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:308:18) at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:618:17) at serializeObject (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:308:18) at serializeInto (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:776:17) at BSON.serialize (/var/www/node_modules/mongoose/node_modules/bson/lib/bson/bson.js:58:27) at Query.toBin (/var/www/node_modules/mongoose/node_modules/mongodb-core/lib/connection/commands.js:141:25) at serializeCommands (/var/www/node_modules/mongoose/node_modules/mongodb-core/lib/connection/pool.js:1050:43) at Pool.write (/var/www/node_modules/mongoose/node_modules/mongodb-core/lib/connection/pool.js:1230:3) at executeWrite (/var/www/node_modules/mongoose/node_modules/mongodb-core/lib/wireprotocol/3_2_support.js:80:10) at WireProtocol.insert (/var/www/node_modules/mongoose/node_modules/mongodb-core/lib/wireprotocol/3_2_support.js:91:3) at Server.insert (/var/www/node_modules/mongoose/node_modules/mongodb-core/lib/topologies/server.js:747:35) at executeWriteOperation (/var/www/node_modules/mongoose/node_modules/mongodb-core/lib/topologies/mongos.js:899:22) at Mongos.insert (/var/www/node_modules/mongoose/node_modules/mongodb-core/lib/topologies/mongos.js:955:3) at Mongos.insert (/var/www/node_modules/mongoose/node_modules/mongodb/lib/topologies/topology_base.js:315:25) at /var/www/node_modules/mongoose/node_modules/mongodb/lib/db.js:1093:21 at handleCallback (/var/www/node_modules/mongoose/node_modules/mongodb/lib/utils.js:128:55)

現在、同じ問題が発生しています。 これを解決する方法についてのアイデア。

「現在同じ問題が発生している」という理由でこれをロックすると、あいまいすぎて実行できなくなります。 新しい問題を開いて、問題テンプレートに従ってください。

みんな、私は原因を見つけたと思います-どうやらそれはmongodb3.6に関連しています(私は最近3.2から3.6にアップグレードし、mongooseも5.xにアップグレードしました)...

そのため、アプリを実行できなくなり、これらの循環依存エラーが発生していました...私にとって有効な唯一の回避策は、 autoIndex: falsemongoose.connectに追加することautoIndex: falseが、そのため、後でアプリケーションでensureIndex()を使用した後でも、インデックスが作成されなくなりました。最終的には、同じ循環依存エラーが発生します。

簡単に言うと、モデル内からすべての属性INDEXを削除し、後でモデルに追加することで、次のように修正できました。

client: { type: ObjectId, ref: 'tsCli', required: true, index: true },

client: { type: ObjectId, ref: 'tsCli', required: true },
[...]
Schema.index({ client: 1 });

そして、さらに重要なことに、複合インデックスから属性INDEXを削除します。

Schema.index({ client: 1, code: 1 }, { unique: true, index: true, partialFilterExpression: { code: { $type: String } } });

Schema.index({ client: 1, code: 1 }, { unique: true, partialFilterExpression: { code: { $type: String } } });

これが他の人に役立つことを願っています
乾杯

配列にインデックスを追加しようとすると、特にこの問題が発生します。

...
tags: {
  type: [String],
  index: true
}
...

そのprop / indexをスキーマに追加するだけで、この問題が発生します

ちょっと@AndrewBarba ..フィールドではなくスキーマに、前述のようにインデックスを追加してみて、それが機能するかどうかを確認してください

@gustvao私は実際に最初にそれを試しましたが、運がありません:(

@AndrewBarbaこれと同じ問題が発生しました。 MongoClientを使用して私は使用しなければなりませんでした:

Collection.createIndexes([
    {
        key: { email: 1 },
        name: 'user_email',
        unique: true
    }
])

お役に立てれば。

テキストインデックスを追加しようとすると、次のようになります。

/Users/ashish/dictionary/js_server/node_modules/mongoose/lib/utils.js:429
        throw err;
        ^

Error: cyclic dependency detected
    at serializeObject (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:331:34)
    at serializeInto (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:934:17)
    at serializeObject (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:345:18)
    at serializeInto (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:934:17)
    at serializeObject (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:345:18)
    at serializeInto (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:934:17)
    at serializeObject (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:345:18)
    at serializeInto (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:934:17)
    at serializeObject (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:345:18)
    at serializeInto (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:934:17)
    at serializeObject (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:345:18)
    at serializeInto (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:934:17)
    at serializeObject (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:345:18)
    at serializeInto (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:934:17)
    at serializeObject (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:345:18)
    at serializeInto (/Users/ashish/dictionary/js_server/node_modules/bson/lib/bson/parser/serializer.js:934:17)
Emitted 'error' event at:
    at done (/Users/ashish/dictionary/js_server/node_modules/mongoose/lib/model.js:1051:13)
    at /Users/ashish/dictionary/js_server/node_modules/mongoose/lib/model.js:1093:16
    at /Users/ashish/dictionary/js_server/node_modules/mongoose/lib/utils.js:424:16
    at err (/Users/ashish/dictionary/js_server/node_modules/mongodb/lib/utils.js:415:14)
    at session.endSession (/Users/ashish/dictionary/js_server/node_modules/mongodb/lib/utils.js:399:27)
    at ClientSession.endSession (/Users/ashish/dictionary/js_server/node_modules/mongodb-core/lib/sessions.js:72:41)
    at executeCallback (/Users/ashish/dictionary/js_server/node_modules/mongodb/lib/utils.js:397:17)
    at err (/Users/ashish/dictionary/js_server/node_modules/mongodb/lib/utils.js:415:14)
    at executeCallback (/Users/ashish/dictionary/js_server/node_modules/mongodb/lib/utils.js:404:25)
    at err (/Users/ashish/dictionary/js_server/node_modules/mongodb/lib/utils.js:415:14)
    at executeCallback (/Users/ashish/dictionary/js_server/node_modules/mongodb/lib/utils.js:404:25)
    at handleCallback (/Users/ashish/dictionary/js_server/node_modules/mongodb/lib/utils.js:128:55)
    at /Users/ashish/dictionary/js_server/node_modules/mongodb/lib/db.js:1068:25
    at executeWrite (/Users/ashish/dictionary/js_server/node_modules/mongodb-core/lib/wireprotocol/3_2_support.js:82:5)
    at WireProtocol.insert (/Users/ashish/dictionary/js_server/node_modules/mongodb-core/lib/wireprotocol/3_2_support.js:91:3)
    at Server.insert (/Users/ashish/dictionary/js_server/node_modules/mongodb-core/lib/topologies/server.js:752:35)

フィールドにテキストインデックスを作成すると、このエラーが発生します。 コード:

WordSchema = new Schema({
  title: {
    type: String,
    required: true,
  },
  meanings: [MeaningSchema],
  keys: [String],
  tags: [String],
  language: String,
  createdAt: Date,
  updatedAt: Date
});

WordSchema.index({title: 'text'}); ---> Error
WordSchema.index({title: 1});      ---> Works fine

ノード-9.11.1
マングース-5.1.1(5.0.8と同じ)
MongoDB-3.6.2

注目に値するかもしれませんが、私はいくつかのオプションでmongodb+srv:// uri構造を使用していました。

mongodb+srv://user:[email protected]?readPreference=primaryPreferred&retryWrites=true

uriオプションを削除すると、他のコードを変更せずに問題が解決しました。

mongodb+srv://user:[email protected]

確認できます- retryWrites削除すると、「古い」 mongodb:// URIを使用しても、問題は解決しました。

こんにちは@ vkarpov15

AtlasのretryWritesを削除するとどのような影響がありますか?これはmongooseが内部で行っていることですか?

私はretryWritesについてこの問題を開きます
https://github.com/Automattic/mongoose/issues/6469 (その後、閉じました..解決されたと思いました)

よろしく、
タレク

こんにちは
最新のマングースバージョンに更新した後も、このエラーが発生します。 どのスキーマにもインデックスを作成していません。 今、私のアプリケーションはとても大きいので、どのコードがこの問題を引き起こしているのかを知ることができません。マングースでは^ 4.13.1は正常に動作しています。
/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/lib/utils.js:429
エラーをスローします。
^

エラー:循環依存が検出されました
serializeObject(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:331:34)
serializeInto(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
serializeObject(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
serializeInto(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
serializeObject(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
serializeInto(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
serializeObject(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
serializeInto(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
serializeObject(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
serializeInto(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
serializeObject(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
serializeInto(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
serializeObject(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
serializeInto(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
serializeObject(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
serializeInto(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
serializeObject(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
serializeInto(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
serializeObject(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
serializeInto(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:724:17)
serializeObject(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:345:18)
serializeInto(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/parser/serializer.js:934:17)
BSON.serializeで(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/bson/lib/bson/bson.js:63:28)
Query.toBin(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/mongodb-core/lib/connection/commands.js:144:25)
serializeCommands(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/mongodb-core/lib/connection/pool.js:1053:43)
Pool.writeで(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/mongodb-core/lib/connection/pool.js:1269:3)
executeWriteで(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/mongodb-core/lib/wireprotocol/3_2_support.js:80:10)
WireProtocol.insert(/Users/yogesh_bansal/workzone/Projects/apiserver/node_modules/mongoose/node_modules/mongodb-core/lib/wireprotocol/3_2_support.js:91:3)
[nodemon]アプリがクラッシュしました-開始する前にファイルの変更を待っています...

retryWritesをオンにすると、このクラッシュが発生するかどうかを調査および確認します。

接続URIから&retryWrites=trueを削除すると、エラーが修正されることを確認できます

確認済み! &retryWrites=true削除すると、エラーが完全に修正されます

Atlasで動作: ?retryWrites=trueないMongoDBクラスター

以下のスクリプトは、ローカルでもAtlasに対しても問題なく機能します。 この問題を再現するには、以下のスクリプトを変更してください。

const assert = require('assert');
const mongoose = require('mongoose');
mongoose.set('debug', true);

const { Schema } = mongoose;

run().then(() => console.log('done')).catch(error => console.error(error.stack));

async function run() {
  await mongoose.connect('mongodb+srv://user:[email protected]/test?retryWrites=true');

  const M = mongoose.model('Test', new Schema({ name: String }));

  await M.create({ name: 'test' });
  console.log(await M.findOne());
}

@ vkarpov15

この問題を再現するには、以下のスクリプトを変更してください。

`` `const assert = require( 'assert');
const mongoose = require( 'mongoose');
mongoose.set( 'debug'、true);

const {スキーマ} =マングース;

run()。then(()=> console.log( 'done'))。catch(error => console.error(error.stack));

非同期関数run(){
mongoose.connect( 'mongodb + srv:// user:[email protected]/test?retryWrites = true'、{dbName: 'db-name'});を待ちます。

const M = mongoose.model( 'Test'、new Schema({name:{type:String、unique:true}}));

M.create({name: 'test'});を待つ
console.log(await M.findOne());
}
`` `

@mykhaliukからのこのコードで:

const mongoose = require('mongoose');
mongoose.set('debug', true);

const { Schema } = mongoose;

run().then(() => console.log('done')).catch(error => console.error(error.stack));

async function run() {
  await mongoose.connect('mongodb+srv://user:[email protected]/test?retryWrites=true', {dbName:'db-name'});

  const M = mongoose.model('Test', new Schema({ name: {type: String, unique: true }}));

  await M.create({ name: 'test' });
  console.log(await M.findOne());
}

次のエラーが発生しました: Error: cyclic dependency detected

retryWritesを維持するために私が見つけた唯一の方法は、mongodb APIの関数createIndexesを使用することです。

const mongoose = require('mongoose');
mongoose.set('debug', true);

const { Schema } = mongoose;

run().then(() => console.log('done')).catch(error => console.error(error.stack));

async function run() {
  await mongoose.connect('mongodb+srv://user:[email protected]/test?retryWrites=true');

  const M = mongoose.model('NewTest', new Schema({ name: {type: String} }));

  M.collection.createIndexes([{key: {name: 1}, name: "name", unique: true}])

  await M.create({ name: 'test' });
  console.log(await M.findOne());
}

そのため、Mongooseモデル定義からuniqueindexを削除し、 createIndexes (https://docs.mongodb.com/manual/reference/command/createIndexes/)を使用してすべてのインデックスを作成します。

私はこの問題に遭遇し、Mongoose4.11.7から5.1.4にアップデートしました。 接続URIから?retryWrites=trueを削除しようとしましたが、うまくいきませんでした。 最後に、次のようなカスタム_idプロパティでindex:trueを使用していることがわかりました。

_id: {
    type: String,
    required: true,
    index: true
  }

index:true削除すると、問題が修正されました。 また、解決策に言及しているこの問題を見つけました: https

持ったときに私のために、私はこの問題に遭遇したretryWrites=true私の接続文字列内とSchema.index({ someKey: 1 })私のモデルに。

モンゴシェルでは、実行db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )返さ{ "featureCompatibilityVersion" : { "version" : "3.6" } }

次に、mongoシェルでdb.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )を実行して、mongodbのfeatureCompatibilityVersion3.4にダウングレードし、 featureCompatibilityVersion retryWrites=trueSchema.index({ someKey: 1 })を使用してアプリケーションを再度実行しました。上記の通り。

インデックスが正常に作成されていたことを確認した後、私は、アップグレードfeatureCompatibilityVersionする3.6実行することでのMongoDBのdb.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )し、再度自分のアプリケーションを実行しました。 循環依存エラーは表示されなくなりました。

問題が見つかりました。 Atlas、 retryWrites 、またはfeatureCompatibilityVersionとは何の関係もありません。 これは、 _idインデックスを作成しようとすることと関係があります。 最小限の再現スクリプト:

const mongoose = require('mongoose');
mongoose.set('debug', true);

Error.stackTraceLimit = Infinity;

const { Schema } = mongoose;

run().then(() => console.log('done')).catch(error => console.error(error.stack));

async function run() {
  await mongoose.connect('mongodb://localhost:27017/test', {dbName: 'test'});

  const M = mongoose.model('Test', new Schema({ _id: { type: String, index: true } }));

  await M.create({ _id: 'abc' + Math.random() });
  console.log(await M.findOne());
}

このためにmongodbドライバーでPRを開きます

素敵な@ vkarpov15

@ vkarpov15💪

接続文字列からretryWritesクエリ文字列を削除して修正しました。


mongodb:// sa@ cluster0-shard-00-00-ljpyb.mongodb。 net:27017 、cluster0-shard-00-01-ljpyb.mongodb。 net:27017 、cluster0-shard-00-02-ljpyb.mongodb。 net:27017 / test?ssl = true&replicaSet = Cluster0-shard-0&authSource = admin& retryWrites = true


mongodb:// sa@ cluster0-shard-00-00-ljpyb.mongodb。 net:27017 、cluster0-shard-00-01-ljpyb.mongodb。 net:27017 、cluster0-shard-00-02-ljpyb.mongodb。 net:27017 / test?ssl = true&replicaSet = Cluster0-shard-0&authSource = admin

お役に立てれば。

_id @ otisidevにあるインデックスを削除してみてください。 したがって、 new Schema({ _id: {type: String, index: true} })schema.index({ _id: 1 })ようなものがある場合は、それを削除してください。

@ vkarpov15ここには2つの問題があると思います。 プロジェクトのどこにも_idインデックスがなく、URIから?retryWritesを削除するまで、このエラーが表示されていました。 それを示すプロジェクトを作ります。 とにかく、これは本当にマングースではなく、mongodbドライバーの問題のようです

@ vkarpov15これは、 _idインデックスを付けずにこの問題を生成するスクリプトです。

マングース:v5.1.5
ノード:v8.11.3

const mongoose = require('mongoose')
const { Schema } = mongoose

async function run() {
  try {
    await mongoose.connect('mongodb://localhost:27017/test?retryWrites=true', {
      dbName: 'mongoose-issue-6109'
    })

    const Model = mongoose.model('Model', new Schema({
      email: {
        type: String,
        index: {
          unique: true
        }
      }
    }))

    await Model.create({
      email: '[email protected]'
    })

    console.log(await Model.findOne())
  } catch(err) {
    console.error(err)
  }
}

run()

インデックスフィールドを次のように設定します。

index: { type: 'hashed', unique: true }

また、常にこの問題を引き起こします

ええ、これは正当な問題のようです-コードベースをスキャンして不正なインデックスを探しましたが、それでも再発するようです。 5.1.0ダウングレードされ、正常に動作しているようです。

https://github.com/Automattic/mongoose/issues/6469へのリンク-さらにいくつかの再現手順。

私はバグを見ました。

_メール_ :{
タイプ:文字列、
必須:true、
_一意:true _
}、
.....。

credentialSchema.index({ _ email_ :1、ドメイン:1、

モデル定義から一意を削除する必要がありました。

@AndrewBarba再現に感謝します。node-mongodb-native#1740のような別の問題を見つけました。https://github.com/mongodb/node-mongodb-native/pull/1758を参照して

アトラスを使用しているときに同じ問題が発生しましたが、ローカルではすべて問題ありませんでした。 誰かが提案したように、それを回避する簡単な修正はパラメータ?retryWrites=true削除することであり、今では問題はありません。

5.1.8で修正する必要があります

MongoDB AtlasとGridStoreで問題が発生しました。「retryWrites = true」を削除するまで、書き込み操作が機能しませんでした。

このページは役に立ちましたか?
0 / 5 - 0 評価