Mongodb 无法使用对象从Meteor方法插入

Mongodb 无法使用对象从Meteor方法插入,mongodb,meteor,meteor-collection2,Mongodb,Meteor,Meteor Collection2,早上好,伙计们!尝试在Meteor中做一个简单的插入操作时遇到了一些麻烦,但是传递一个对象会让我很难受 我的网站上有一组过滤器正在工作,但现在我想将这些过滤器的选择器保存到一个集合中,这样我就可以快速提取与多个过滤器匹配的文档 问题似乎是传递了一个包含已保存搜索的对象。该对象确实有Collection2可能会看到的嵌套属性(“addresses.state”),但我在模式上设置了“blackbox:true”,所以我不知道它为什么会在那里查看 以下是整个流程: 保存搜索名称的表单: <te

早上好,伙计们!尝试在Meteor中做一个简单的插入操作时遇到了一些麻烦,但是传递一个
对象
会让我很难受

我的网站上有一组过滤器正在工作,但现在我想将这些过滤器的
选择器
保存到一个集合中,这样我就可以快速提取与多个过滤器匹配的文档

问题似乎是传递了一个包含已保存搜索的对象。该对象确实有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)