Meteor-如何从集合中提取密钥名?

Meteor-如何从集合中提取密钥名?,meteor,Meteor,我的初始化文件中包含以下内容,以便在启动时将值加载到数据库中: Meteor.startup(function() { if(typeof Person.findOne() === 'undefined') { Person.insert({ name: "", gender: ["male", "female", "prefer not to say"], age: 0 });

我的初始化文件中包含以下内容,以便在启动时将值加载到数据库中:

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在客户端调用,并将字符串值作为其唯一的argumentinput传递

我想对照Person集合中的键的名称检查此“input”字符串值

此人有一个名为“性别”的钥匙。例如,如果“input”包含字符串值“gender”,那么if语句应该是true,但在我的例子中它是false,因此if语句中的代码永远不会执行

在此方面的任何帮助/指导将不胜感激

更新

我搜索了mongodb文档,在这里找到了:并且使用了来自此线程的一些帮助: 我可以这样做:

var checkThis = {};
checkThis[input] = { $exists : true };
var p = Person.findOne(checkThis);
因此,如果它找到一个,那么“p”将保留记录,否则它将是未定义的。但是上面的代码仍然不起作用

如果我直接说:

var p = Person.find({gender: {$exists: true} });
然后它就起作用了


因此,我需要帮助使代码与变量“input”一起工作。

Mongo是一个无模式的数据库-您可以在集合中插入任何您喜欢的文档结构,数据存储不会抱怨。因此,用户将无法指示哪些字段符合该模式

人们处理这个问题最常用的方法是使用一个包,该包在mongo之上提供一个模式层。与流星,一个流行的选择是,及其相关的软件包。SimpleSchema允许您定义应允许哪些字段进入集合,AutoForm为您提供了一组帮助程序,以在UI中强制执行这些字段

相反,如果您不喜欢使用软件包,可以执行以下操作:

person.js

所需变量\u字段={ 名称:String, 性别:[“男性”、“女性”、“不愿意说”], 年龄:数目 }; 个人=新流星。收藏“个人”; Person.isValid=functionperson{ 试一试{ 检查人员,必填字段; 返回true; }捕捉错误{ 返回false; } }; 流星法{ “person.insert”:函数person{ 检查人员,必填字段; 返回Person.insertperson; } }; my-template.js

Template.myTemplate.events{ 提交:功能{ 个人变量={ 名称:$'name'.val, 性别:$‘性别’。val, 年龄:parseInt$'age'.val,10 }; 如果Person.isValidperson 流星.呼叫'person.insert',person; 其他的 警惕“病人”; } };
在这里,我们使用meteor的软件包进行一些基本的现场验证。通过向Person集合添加isValid帮助器,我们可以验证模式,而无需方法调用。最重要的是,我们可以在插入新文档时重复使用相同的检查。

因此,您基本上想验证输入框中输入的路径是否是Person模式的一部分?嘿@BrianShamblen,感谢您的响应。是的,我想验证输入是否是Person模式的一部分。我更喜欢通过使用aldeed:simple模式验证合法输入的aldeed:autoform进行验证。如果没有特别的理由避免使用它们,它们可能会简化您的生活。var key in Person不应该是var key in Person。findOne{}?Hey@Petr感谢您检查这一行。我现在更新了问题,你能帮我解决这个问题吗。嘿@David Weldon,谢谢你回答我的问题。在我的例子中,稍后在程序中,我还将动态地向集合添加键。我喜欢你的解决方案的方向,但就我而言,这不是我想要达到的。我想我找到了一种处理这种情况的方法,我将把它写下来作为问题的更新,也许你可以看看它,因为它需要修正才能工作。我再次感谢David为这个问题撰写了如此详尽而深刻的答案。也许您可以将您的模式作为单独的集合添加到数据库中。每次使用新密钥时,都可以更新模式。这是一个非常不寻常的方法,但在你的情况下可能有意义。谢谢@David Weldon,我会试试。