【发布时间】:2015-07-01 04:38:28
【问题描述】:
我的初始化文件中有以下内容,用于在启动时获取加载到数据库中的值:
Meteor.startup(function() {
if(typeof Person.findOne() === 'undefined') {
Person.insert({
name: "",
gender: ["male", "female", "prefer not to say"],
age: 0
});
}
});
然后在 server/abc.js 我有:
Meteor.methods({
checkPerson: function (input) {
for (var key in Person) {
if (input === key) {
...
}
}
}
});
这个meteor方法checkPerson在客户端被调用,一个字符串值作为它的唯一参数(输入)被传递。
我想根据 Person 集合中的键名检查这个“输入”字符串值。
Person 有一个名为“gender”的键。因此,例如,如果“输入”包含字符串值“性别”,则 if 语句应该为真,但在我的情况下它为假,因此 if 语句中的代码永远不会执行。
对此的任何帮助/指导将不胜感激。
更新
我搜索了 mongodb 文档并在此处找到:http://docs.mongodb.org/manual/reference/operator/query/exists/ 并且还使用了该线程的一些帮助:(using $exists in Mongo with dynamic key names and the native driver for node) 我可以这样做:
var checkThis = {};
checkThis[input] = { $exists : true };
var p = Person.findOne(checkThis);
因此,如果它找到一个,则“p”保存该记录,否则它将是未定义的。但是上面的代码仍然不起作用。
如果我直接放:
var p = Person.find({gender: {$exists: true} });
然后就可以了。
所以我需要帮助以使代码与变量“输入”一起使用。
【问题讨论】:
-
那么,你基本上是想验证输入框中输入的路径是Person模式的一部分吗?
-
嘿@BrianShamblen,感谢您的回复。是的,我想验证输入是 Person 模式的一部分。
-
我更喜欢通过
aldeed:autoform执行此操作,它使用aldeed:simple-schema来验证合法输入。如果没有特别的理由避免使用它们,它们可能会简化您的生活。 -
不应该是
var key in Person是var key in Person.findOne({})? -
嘿@Petr 感谢您检查该行。我现在更新了问题,您能帮忙解决问题吗?
标签: meteor