我尝试动态访问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:对于模式,我没有此集合的模式,因为密钥名称是动态创建的。 非常感谢。
答案 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始终假定someAttribute
是someObject
的属性。不是范围中设置的变量。如果你想要一个包含在字符串变量中的属性toto
的值(在我的例子中,someAttribute
),你必须将这个变量作为索引传递,如下所示:
console.log(someObject[someAttribute]); // 'someValue'
答案 1 :(得分:0)
如果您可以描述集合customConfiguration
的架构,将会很有帮助。我只是猜测它包含一个文档集合,每个文档只有一个属性(例如userHomeBackgroundColor
或56xhPYg8w3Qtv9xPLBackgroundColor
),并且您对具有正确属性名称的一个文档感兴趣以读取属性值。所以我想,在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
的架构的背景知识。您可能还需要查看文档中$exists
(http://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];
此解决方案已在之前的答案中进行了描述。