Javascript 如何仅在Mongo集合中的特定字段包含特定值时运行函数?

Javascript 如何仅在Mongo集合中的特定字段包含特定值时运行函数?,javascript,arrays,meteor,methods,Javascript,Arrays,Meteor,Methods,我在一个名为“storedKeys”的集合中存储了一个“key”(以及其他一些不重要的信息)作为数组字段 这看起来像: { "_id" : "Company(02fd8fba13cf51cf)", "infos" : { "companyName" : "company", "street" : "exampleStreet", "number" : "123", "city" : exampleCity",

我在一个名为“storedKeys”的集合中存储了一个“key”(以及其他一些不重要的信息)作为数组字段

这看起来像:

{
    "_id" : "Company(02fd8fba13cf51cf)",
    "infos" : {
        "companyName" : "company",
        "street" : "exampleStreet",
        "number" : "123",
        "city" : exampleCity",
        "createdAt" : ISODate("2017-06-24T13:20:09.771Z")
    },
    "key" : ["123456789"]
}
现在,我想使用这个“key”字段作为权限,通过调用Meteor方法在其他集合中运行一些更新。此外,仅当storedKeys中存在正确的_id时,才应执行此方法

更准确地说:如果eventhandler放入方法调用的变量与集合storedKeys中定义的字段匹配,则执行该方法。否则,抛出错误,不执行该方法

为此,我尝试通过提交表单调用一个方法,然后尝试在服务器端方法中使用带有find({})函数的if子句,如下所示:

客户端(触发方法)

服务器(运行方法)

但是,问题是,即使storedKeys中没有密钥或storedKeys中不存在_id,该方法始终正确运行。因此,if()和find({})没有我期望的验证。始终执行该方法并更新集合(您甚至不用钥匙也可以开门)。

.find()
返回一个光标,该光标是一个始终真实的函数

如果希望找到单个文档,请使用
.findOne()
。如果您希望找到>0,则可以测试
.find(query).count()
(0将是假的,任何其他数字都是真的)

.find()
返回一个游标,该游标是一个始终真实的函数

如果希望找到单个文档,请使用
.findOne()
。如果希望找到>0,则可以测试
.find(query).count()
(0为假,其他任何数字均为真)

Template.keyCollectionThing.events({
"submit form": function (e) {
e.preventDefault();
var key = "123456789";
var id = "Company(02fd8fba13cf51cf)";
Meteor.call('updateOtherCollections', key, id);
}
});
    Meteor.methods({
      'updateOtherCollections': function(key, id) {

    if(storedKeys.find({"key": key}) && storedKeys.find({"_id": id})) {

       Meteor.users.update(
            {'_id': this.userId
          }, {
              $push: {
                'pushedId': id
                    }
              });

      otherDB.update(
      {'_id': this.userId
      }, {
        $push: {
          'pushedId': id
        }
      }
      );

      storedKeys.update(
      {'_id': id
    }, {
      $set: {
        "key": []
      }
    });
  }} 
 });