【问题标题】:Migrating to Meteor 1.7.0.4 : MongoDB : "updating the path ... would create a conflict at ..."迁移到 Meteor 1.7.0.4:MongoDB:“更新路径……会在……处产生冲突”
【发布时间】:2018-08-13 16:49:29
【问题描述】:

我正在使用流星,我正在尝试从流星 1.6 到 1.7 但是我遇到了错误,我无法在我的测试中获得相关信息:

tests.jpg

我得到了很多这样的东西(有些可能是多余的、未使用的或过时的):

Error: Updating the path 'relationChangeRate' would create a conflict at 'relationChangeRate'
at Function.MongoError.create (C:\Users\fquesselaire\AppData\Local\.meteor\packages\npm-mongo\3.0.11\npm\node_modules\mongodb-core\lib\error.js:45:10)
at toError (C:\Users\fquesselaire\AppData\Local\.meteor\packages\npm-mongo\3.0.11\npm\node_modules\mongodb\lib\utils.js:149:22)
at C:\Users\fquesselaire\AppData\Local\.meteor\packages\npm-mongo\3.0.11\npm\node_modules\mongodb\lib\collection.js:1029:39
at C:\Users\fquesselaire\AppData\Local\.meteor\packages\npm-mongo\3.0.11\npm\node_modules\mongodb-core\lib\connection\pool.js:544:18
at _combinedTickCallback (internal/process/next_tick.js:131:7)
at process._tickDomainCallback (internal/process/next_tick.js:218:9)

在 1.6 中没有发生。*

我尝试将我的 mongodb 升级到 3.6.6,没有效果。 我也无法在测试中获取整个堆栈以查看究竟执行了什么。

我的 .meteor/版本:

255kb:meteor-status@1.5.0
accounts-base@1.4.2
accounts-password@1.5.1
akasha:fs-extra@0.26.3
alanning:roles@1.2.16
aldeed:autoform@6.3.0
aldeed:autoform-bs-button-group-input@2.0.0
aldeed:autoform-select2@3.0.1
aldeed:collection2-core@2.1.2
aldeed:template-extension@4.1.0
allow-deny@1.1.0
arillo:flow-router-helpers@0.5.2
autoupdate@1.4.1
babel-compiler@7.1.1
babel-runtime@1.2.4
base64@1.0.11
binary-heap@1.0.10
blaze@2.3.2
blaze-html-templates@1.1.2
blaze-tools@1.0.10
boilerplate-generator@1.5.0
caching-compiler@1.1.12
caching-html-compiler@1.1.3
callback-hook@1.1.0
check@1.3.1
coffeescript@1.0.17
cultofcoders:mocha@2.4.6
dburles:collection-helpers@1.1.0
dburles:factory@1.1.0
ddp@1.4.0
ddp-client@2.3.3
ddp-common@1.4.0
ddp-rate-limiter@1.0.7
ddp-server@2.2.0
deps@1.0.12
diff-sequence@1.1.0
dynamic-import@0.4.1
ecmascript@0.11.1
ecmascript-runtime@0.7.0
ecmascript-runtime-client@0.7.2
ecmascript-runtime-server@0.7.1
ejson@1.1.0
email@1.2.3
es5-shim@4.8.0
fourseven:scss@4.9.0
geojson-utils@1.0.10
hot-code-push@1.0.4
html-tools@1.0.11
htmljs@1.0.11
http@1.4.1
id-map@1.1.0
idmontie:migrations@1.0.3
jquery@1.11.11
kadira:blaze-layout@2.3.0
kadira:flow-router@2.12.1
lai:collection-extensions@0.2.1_1
launch-screen@1.1.1
livedata@1.0.18
lmieulet:meteor-coverage@1.1.4
localstorage@1.2.0
logging@1.1.20
matb33:collection-hooks@0.8.4
meteor@1.9.2
meteor-base@1.4.0
meteorhacks:picker@1.0.3
meteortesting:browser-tests@1.0.0
meteortesting:mocha@1.0.0
minifier-css@1.3.1
minifier-js@2.3.5
minimongo@1.4.4
mobile-experience@1.0.5
mobile-status-bar@1.0.14
modern-browsers@0.1.2
modules@0.12.2
modules-runtime@0.10.2
momentjs:moment@2.22.2
mongo@1.5.1
mongo-dev-server@1.1.0
mongo-id@1.0.7
mouse0270:bootstrap-notify@3.1.3
natestrauser:select2@4.0.3
npm-bcrypt@0.9.3
npm-mongo@3.0.11
observe-sequence@1.0.16
ordered-dict@1.1.0
ostrio:cookies@2.3.0
ostrio:files@1.10.1
practicalmeteor:chai@2.1.0_1
practicalmeteor:loglevel@1.2.0_2
practicalmeteor:mocha-core@1.0.1
practicalmeteor:sinon@1.14.1_2
promise@0.11.1
raix:eventemitter@0.1.3
random@1.1.0
rate-limit@1.0.9
reactive-dict@1.2.1
reactive-var@1.0.11
reload@1.2.0
retry@1.1.0
rocketchat:streamer@0.5.0
routepolicy@1.0.13
service-configuration@1.0.11
session@1.1.8
sewdn:collection-behaviours@0.3.0
sha@1.0.9
shell-server@0.3.1
socket-stream-client@0.2.2
softwarerero:accounts-t9n@1.3.11
spacebars@1.0.15
spacebars-compiler@1.1.3
srp@1.0.12
standard-minifier-css@1.4.1
standard-minifier-js@2.3.4
templating@1.3.2
templating-compiler@1.3.3
templating-runtime@1.3.2
templating-tools@1.1.2
tmeasday:check-npm-versions@0.3.2
tmeasday:test-reporter-helpers@0.2.1
tracker@1.2.0
ui@1.0.13
underscore@1.0.10
url@1.2.0
useraccounts:bootstrap@1.14.2
useraccounts:core@1.14.2
useraccounts:flow-routing@1.14.2
webapp@1.6.2
webapp-hashing@1.0.9
zimme:active-route@2.3.2

我的节点包:

  "dependencies": {
    "@babel/runtime": "^7.0.0-beta.54",
    "@mdi/font": "^2.5.94",
    "babel-runtime": "^6.26.0",
    "bcrypt": "^3.0.0",
    "bootstrap": "^3.3.7",
    "bootstrap-material-design": "^0.5.10",
    "bootstrap-slider": "^10.0.2",
    "bootstrap-toggle": "^2.2.2",
    "clone": "^2.1.1",
    "csv-parse": "^2.5.0",
    "d3": "^5.5.0",
    "file-saver": "^1.3.8",
    "fs-extra": "^3.0.1",
    "gm": "^1.23.0",
    "jquery": "^2.2.4",
    "jsondiffpatch": "^0.3.11",
    "lodash": "^4.17.10",
    "meteor-node-stubs": "^0.4.1",
    "mkdirp": "^0.5.1",
    "object-path": "^0.11.4",
    "popper.js": "^1.14.3",
    "select2": "^4.0.4",
    "select2-bootstrap-theme": "^0.1.0-beta.10",
    "simpl-schema": "^1.5.3",
    "uuid": "^3.3.2",
    "xmldoc": "^1.1.0",
    "zip-local": "^0.3.4"
  },
  "devDependencies": {
    "chromedriver": "^2.40.0",
    "gulp": "^3.9.1",
    "selenium-webdriver": "^3.6.0"
  }

如果您对正在发生的事情有任何线索? 我可以提供有关应用程序中发生的事情的更多信息,但现在简单解释一下这个错误的含义已经很棒了。正如我所说,这个错误只附加在 1.7 中。

编辑:忘记说我的测试在工作代码上抛出了这个。 功能运行良好,但测试不行。

编辑²:

此方法是更新集合 projectSettings 的方法。

_duplicateProjectSettings(newSession) {
  const settings = this.session.projectSettings();
  delete settings._id;
  settings.sessionId = newSession._id;
  const newSettings = newSession.projectSettings();
  ProjectSettings.update(newSettings._id, { $set: settings });
}

relationChangeRate 是 projectSettings 集合的简单模式字段(我使用 collection2-core):

relationChangeRate: {
  type: Number,
  allowedValues: _.values(RelationRates),
  defaultValue: 0.0
}

projectSettings 扩展了 mongo.collection,但在这种情况下,更新方法不会被覆盖。 代码接缝对我来说是正确的,因为 _id 已被很好地删除并在更新请求之前设置为新对象。但也许我错了?

编辑³:

ProjectSettings 是 collection-helper:

代码如下:

Sessions.helpers({
[...]
  projectSettings() {
      const conds = { sessionId: this._id };
      return ProjectSettings.findOne(conds);
  },
[...]

一个集合助手基本上为这个集合中的每个文档添加一个方法。这意味着任何会话对象都将具有此方法。在集合助手中,“this”指的是当前集合对象。

所以应该不错吧?

_duplicateProjectSettings 可以这样写:

_duplicateProjectSettings(newSession) {
  // const settings = this.session.projectSettings();
  const settings = ProjectSettings.findOne({ sessionId: this.session._id });
  delete settings._id;
  settings.sessionId = newSession._id;
  // const newSettings = newSession.projectSettings();
  const newSettings = ProjectSettings.findOne({ sessionId: newSession._id });
  ProjectSettings.update(newSettings._id, { $set: settings });
}

(我也试过了,结果一样)

【问题讨论】:

  • 您是否在某处更新/更新relationChangeRate?您是否有可能在更新子句中多次定位它(例如,$set$inc)或 upsert(例如,$set$setOnInsert)?你在用findAndModify吗?
  • 其实是的。有一个名为 duplicate 的函数,可以在基础对象上创建副本。在同一个函数中,我调用Session.create(即重载,调用ProjectSettings.create)因为Session对象依赖于ProjectSettings。然后,在下面的代码中,更新了 ProjectSettings。在我可以更新 ProjectSettings 之前应该附加什么?
  • 我不确定我是否理解那里发生的事情。这些听起来像是不应该相互影响的不同查询(至少就此错误消息而言)。您能否编辑您的问题以包含更新 relationChangeRate 字段的相关查询/查询?我正在专门寻找具有多个子句的此类查询,其中多个子句针对该字段。
  • 我按照您的要求编辑了帖子,如果您需要更多信息,请告诉我。
  • 嗯,从技术上讲,这就是代码,但目前还不清楚传输到update 查询的实际对象是什么。然而,这似乎不太可能是原因。是否还有其他涉及该字段的查询?您可以尝试通过记录或注释掉一些查询来查明原因。设置兼容模式可能有助于消除错误,但如果您的生产服务器设置不同,您可能会在生产中遇到它们。

标签: mongodb testing meteor mocha.js conflict


【解决方案1】:

从 shell 运行它对我有用......不是最好的解决方案。我在尝试使用 accounts-password 包登录时遇到了问题。

$ meteor mongo
meteor:PRIMARY> db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )

【讨论】:

  • 很遗憾,我无法在 20 日星期一之前测试它。无论如何感谢您的回答。即使解决方案不理想,也聊胜于无。我也在使用帐户密码包。也许相关?
  • 我尝试了这个解决方案,因为我使用外部 Mongo 数据库,我从我的本地 mongo 安装文件夹启动了 mongo 可执行文件,(默认为 C:\Program files\MongoDB\server\3.6\bin)然后我从这个路径启动一个 cmd,然后输入这个命令。
  • 得到 {"ok": 1} 作为回报重新启动了 Mongo 服务,重新启动了我的流星任务,没有效果,我的测试一直在抛出,
【解决方案2】:

好的,

这是一个半答案,但是 经过一些扩展搜索后,我发现我有一个重置 MONGO_URL 的测试脚本,如下所示:

set MONGO_URL=
set TEST_BROWSER_DRIVER=chrome
set TEST_WATCH=1
set TEST_CLIENT=0
set TEST_SERVER=1

meteor test -p 3100 --driver-package=cultofcoders:mocha %*

在确定我在本地开发数据库上启动了测试后,测试通过了(顺便说一句,我的数据库粉碎了哈哈)。因此,这意味着它可能与版本相关,或与测试条件相关。 我无法打印用于测试的 mongodb 版本,所以我不知道确切的测试条件。

我所知道的就是这样: 流星“正常运行”Mongo 版本:3.6.4 我的本地 Mongo 版本:3.6.6

【讨论】:

    猜你喜欢
    • 2018-11-29
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 2011-02-28
    • 2019-05-05
    • 1970-01-01
    相关资源
    最近更新 更多