我有一个带有providerData对象的mongoose模式:
... , providerData: {}, ...
我希望根据providerData
对象中对象的ID查询文档。
所以我假设我必须像这样使用点符号:
User.findOne({ providerIDString: providerID }, function(err, user) {...});
,其中
providerIDString is a string like 'providerData.facebook.id'
providerID is the providerData.facebook id
但是,即使
,查询也不会返回任何结果db.users.find({"providerData.facebook.id":"THEFACEBOOKID"})
mongodb shell中的返回正确的文档
我是否正确认为发生这种情况是因为providerData.facebook
和providerData.facebook.id
未在用户架构中定义?
这是否意味着我必须将它们添加到模式中,或者有没有办法在不在mongoose模式中的嵌套对象上使用点表示法?
答案 0 :(得分:5)
我猜你有这样的输入:
var providerIdString = 'providerData.facebook.id',
facebookId = "THEFACEBOOKID";
在这种情况下,您使用:
var query = {};
query[provoderIdString] = facebookId;
然后:
db.users.find(query);
看哪!它有效。
这就是你如何用JavaScript中的变量名构造对象。