嵌套对象上的点表示法不在Mongoose模式中

时间:2015-07-11 14:36:12

标签: javascript node.js mongodb mongoose mongodb-query

我有一个带有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.facebookproviderData.facebook.id未在用户架构中定义?

这是否意味着我必须将它们添加到模式中,或者有没有办法在不在mongoose模式中的嵌套对象上使用点表示法?

1 个答案:

答案 0 :(得分:5)

我猜你有这样的输入:

var providerIdString = 'providerData.facebook.id',
    facebookId = "THEFACEBOOKID";

在这种情况下,您使用:

var query = {};
query[provoderIdString] = facebookId;

然后:

db.users.find(query);

看哪!它有效。

这就是你如何用JavaScript中的变量名构造对象。