Mongodb 无法使用对象从Meteor方法插入
早上好,伙计们!尝试在Meteor中做一个简单的插入操作时遇到了一些麻烦,但是传递一个Mongodb 无法使用对象从Meteor方法插入,mongodb,meteor,meteor-collection2,Mongodb,Meteor,Meteor Collection2,早上好,伙计们!尝试在Meteor中做一个简单的插入操作时遇到了一些麻烦,但是传递一个对象会让我很难受 我的网站上有一组过滤器正在工作,但现在我想将这些过滤器的选择器保存到一个集合中,这样我就可以快速提取与多个过滤器匹配的文档 问题似乎是传递了一个包含已保存搜索的对象。该对象确实有Collection2可能会看到的嵌套属性(“addresses.state”),但我在模式上设置了“blackbox:true”,所以我不知道它为什么会在那里查看 以下是整个流程: 保存搜索名称的表单: <te
对象
会让我很难受
我的网站上有一组过滤器正在工作,但现在我想将这些过滤器的选择器
保存到一个集合中,这样我就可以快速提取与多个过滤器匹配的文档
问题似乎是传递了一个包含已保存搜索的对象。该对象确实有Collection2可能会看到的嵌套属性(“addresses.state”),但我在模式上设置了“blackbox:true”,所以我不知道它为什么会在那里查看
以下是整个流程:
保存搜索名称的表单:
<template name="saveSearch">
<div>
<button class="btn btn-link" type="button" data-toggle="collapse" data-target="#saveSearchForm" aria-expanded="false" aria-controls="saveSearchForm">
Advanced Search
</button>
<div class="collapse" id="saveSearchForm">
<div class="well">
// Display filters from the awesome meteor-tabular-filter package
{{> expression_filter}}
<form id="saveSearch" class="form-inline">
<div class="form-group">
<label for="searchName">Save Search</label>
<input type="text" class="form-control" name="searchName" id="searchName" placeholder="Search Name">
</div>
<button type="submit" class="btn btn-primary">Save Search</button>
</form>
</div>
</div>
</div>
</template>
这里有两个不同的console.log();传递给方法的结果:
1) {"name":"Alabama","selector":{"addresses.state":"AL"}}
2) {"name":"Alabama","selector":{"$and":[{"addresses.state":"AL"},{"lastName":"Knapp"}]}}
流星法插入搜索
// in both/methods/insert
Meteor.methods({
insertSearch( doc ) {
check( doc, Searches.simpleSchema() );
var defaultProperties = {
orgId : Meteor.user().profile.currentOrg,
createdBy: Meteor.userId(),
createdAt: moment().toDate()
};
newDoc = _.extend(doc, defaultProperties);
console.log('search to insert: ' + JSON.stringify(newDoc));
try {
var searchId = Searches.insert( newDoc, {bypassCollection2: true} );
console.log('search insert successful');
return searchId;
} catch( exception ) {
console.log('search insert failed');
throw new Meteor.Error(500, 'Search failed to save.');
}
}
});
这里有两个不同的console.log();传递给插入的结果:
1) {"name":"Alabama","selector":{"addresses.state":"AL"},"orgId":"testorg","createdBy":"DHo3vr3fiZbSYBJks","createdAt":"2016-01-28T13:38:27.499Z"}
2) {"name":"Alabama","selector":{"$and":[{"addresses.state":"AL"},{"lastName":"Knapp"}]},"orgId":"testorg","createdBy":"DHo3vr3fiZbSYBJks","createdAt":"2016-01-28T13:42:51.468Z"}
以及搜索集合的架构定义
Searches = new Mongo.Collection( 'searches' );
Searches.allow({
insert: () => false,
update: () => false,
remove: () => false
});
Searches.deny({
insert: () => true,
update: () => true,
remove: () => true
});
let searchSchema = new SimpleSchema({
name: {
label: 'Search Name',
type: String
},
selector: {
label: 'Search Criteria',
type: Object,
blackbox: true,
optional: true
},
orgId: {
type: String,
optional: true
},
createdBy: {
type: String,
label: "Created By",
optional: true,
autoValue: function() {
return Meteor.userId()
}
},
createdAt: {
type: Date,
label: "Created At",
optional: true,
autoValue: function () {
if (this.isInsert) {
return new Date;
}
},
denyUpdate: true
},
updatedAt: {
type: Date,
label: "Updated At",
optional: true,
autoValue: function () {
if (this.isInsert) {
this.unset();
} else {
return new Date;
}
}
}
});
Searches.attachSchema( searchSchema );
最后,这里是Kadira的错误日志:
message: Search failed to save. [500]
stack:
Error: Search failed to save. [500]
at [object Object].Meteor.methods.insertSearch (both/methods/insert/searches.js:21:13)
at [object Object].methodMap.(anonymous function) (packages/meteorhacks_kadira/lib/hijack/wrap_session.js:164:1)
at maybeAuditArgumentChecks (livedata_server.js:1698:12)
at livedata_server.js:708:19
at [object Object]._.extend.withValue (packages/meteor/dynamics_nodejs.js:56:1)
at livedata_server.js:706:40
at [object Object]._.extend.withValue (packages/meteor/dynamics_nodejs.js:56:1)
at livedata_server.js:704:46
at tryCallTwo (/Users/allen/.meteor/packages/promise/.0.5.1.1u69k2a++os+web.browser+web.cordova/npm/node_modules/meteor-promise/node_modules/promise/lib/core.js:45:5)
at doResolve (/Users/allen/.meteor/packages/promise/.0.5.1.1u69k2a++os+web.browser+web.cordova/npm/node_modules/meteor-promise/node_modules/promise/lib/core.js:171:13)
提前感谢您的帮助 当你把挡块拿出来时,你会犯什么样的错误?@StephenWoods:谢谢你看一看!最后,我将
JSON.stringify(查询)
和JSON.parse()
添加到return帮助程序中,并使其正常工作。我会回去看看错误。好奇为什么会发生这种事。。。
message: Search failed to save. [500]
stack:
Error: Search failed to save. [500]
at [object Object].Meteor.methods.insertSearch (both/methods/insert/searches.js:21:13)
at [object Object].methodMap.(anonymous function) (packages/meteorhacks_kadira/lib/hijack/wrap_session.js:164:1)
at maybeAuditArgumentChecks (livedata_server.js:1698:12)
at livedata_server.js:708:19
at [object Object]._.extend.withValue (packages/meteor/dynamics_nodejs.js:56:1)
at livedata_server.js:706:40
at [object Object]._.extend.withValue (packages/meteor/dynamics_nodejs.js:56:1)
at livedata_server.js:704:46
at tryCallTwo (/Users/allen/.meteor/packages/promise/.0.5.1.1u69k2a++os+web.browser+web.cordova/npm/node_modules/meteor-promise/node_modules/promise/lib/core.js:45:5)
at doResolve (/Users/allen/.meteor/packages/promise/.0.5.1.1u69k2a++os+web.browser+web.cordova/npm/node_modules/meteor-promise/node_modules/promise/lib/core.js:171:13)