如何从mongo数据库

时间:2015-04-30 09:56:01

标签: javascript mongodb meteor

我尝试动态访问mongo数据库中的字段。

目标字段由以下行给出:

var  contextTarget= Session.get('contextLayout')+"BackgroundColor";

其中 Session.get('contextLayout')可以是字符串或集合的_id(例如userHomeBackgroundColor或56xhPYg8w3Qtv9xPLBackgroundColor)。

我不知道如何访问该值。 我试过这段代码:

    var  contextTarget= Session.get('contextLayout')+"BackgroundColor";
    var tempStore ={};
    tempStore['target']=contextTarget;
    var newTarget = tempStore.target;
    console.log(newTarget);//return the correct value
    var color = customConfiguration.findOne({'author':auth}).newTarget;
    console.log(color);//return undefined

它不起作用。我想这是因为newTarget变量是一个字符串,因为如果我直接在控制台中写出预期的结果,它就可以工作。我该怎么办?

编辑。

像BraveKenny说的那样:

 var color = customConfiguration.findOne({'author':auth})[contextTarget];

实际上,没有必要通过对象tempStore。使用方括号键可以正确发送。我已经尝试了但是在方括号之前有一个点。 @Michael:对于模式,我没有此集合的模式,因为密钥名称是动态创建的。 非常感谢。

2 个答案:

答案 0 :(得分:1)

如果我理解正确,最后,您希望获得customConfiguration对象的变量属性,该名称包含在newTarget中。

也许试试这个:

var color = customConfiguration.findOne({'author':auth})[newTarget];

基本上当你输入:

someObject.toto = 'someValue';
var someAttribute = 'toto';
console.log(someObject.someAttribute); //undefined
console.log(someObject[someAttribute]); // 'someValue'

当使用点表示法调用时,JavaScript始终假定someAttributesomeObject的属性。不是范围中设置的变量。如果你想要一个包含在字符串变量中的属性toto的值(在我的例子中,someAttribute),你必须将这个变量作为索引传递,如下所示:

console.log(someObject[someAttribute]); // 'someValue'

答案 1 :(得分:0)

如果您可以描述集合customConfiguration的架构,将会很有帮助。我只是猜测它包含一个文档集合,每个文档只有一个属性(例如userHomeBackgroundColor56xhPYg8w3Qtv9xPLBackgroundColor),并且您对具有正确属性名称的一个文档感兴趣以读取属性值。所以我想,在JSON表示法中,集合看起来像这样:

[
  {"userHomeBackgroundColor": "red"},
  {"56xhPYg8w3Qtv9xPLBackgroundColor": "green"},
  {"someOtherConfigProperty" : "someOtherValue"}
]

如果这个假设是正确的,我会替换原来的

var color = customConfiguration.findOne({'author':auth}).newTarget;

有这样的事情:

var selector = {};             // Empty selector object for findOne
selector[contextTarget] =      // Add dynamic property and as its value
  {$exists: true};             // an object with an $exists-property
                               // with value true

// now find the (first) configuration document having the dynamic property 
var configDocument = customConfiguration.findOne(selector);

// read the value of the dynamic property of the configuration document
var color = configDocument[contextTarget]; 

但为了验证这一点,我需要更多关于集合customConfiguration的架构的背景知识。您可能还需要查看文档中$existshttp://docs.mongodb.org/manual/reference/operator/query/exists/#op._S_exists)和findOne()http://docs.mongodb.org/manual/reference/method/db.collection.findOne/)的文档。

但是,如果集合customConfiguration包含每个作者的一个配置文档,请将您的行更改为:

var color = customConfiguration.findOne({'author':auth})[newTarget];

此解决方案已在之前的答案中进行了描述。