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