【发布时间】:2018-08-13 16:49:29
【问题描述】:
我正在使用流星,我正在尝试从流星 1.6 到 1.7 但是我遇到了错误,我无法在我的测试中获得相关信息:
我得到了很多这样的东西(有些可能是多余的、未使用的或过时的):
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