按物业查找

时间:2017-11-21 10:18:09

标签: javascript mongodb mongoose passport.js

我已经定义了一个moogoose模式如下:

var UserSchema = new mongoose.Schema({
    google: Object,
    github: Object,
    linkedin: Object,
    facebook: Object,
    microsoft: Object,
    twitter: Object
});

所有这些属性都应包含子属性id。因此,如果profile发送了loginSuccessfully,我想找到id(根据profile.provider)与profile.id匹配的文档。

但是,传统的.find({ "...": profile.id }, (err, users) => ... )无法表达profile.provider的动态情况。

有谁知道如何编写这个mongoose查询?

1 个答案:

答案 0 :(得分:0)

如果您尝试在所有提供商中查找ID,可以使用$or

.find(
    { $or: ["google", "github", "linkedin", "facebook", "microsoft", "twitter"].map(p=>({[p + ".id"]: profile.id})) }, 
    (err, users) => ... 
)

对于单个已知提供商,它是传统

.find(
    { [provider + ".id"]: profile.id }, 
    (err, users) => ... 
)