mongoDB在嵌套文档中查询嵌套文档

时间:2017-09-27 20:16:12

标签: node.js mongodb mongoose mongodb-query

我在查询中访问user.info.name.familyName时遇到问题。我对数据库设计和查询很新,我不知道它是否可能。

所以这是我的架构。也许它可能需要重新设计,以便我正在努力工作。

var UserSchema  = mongoose.Schema({
    username: {
        type: String,
        index: true,
        required: true,
        unique: true
    },
    password: {
        type: String,
        required: true
    },
    email: {
        type: String,
        required: true,
        lowercase: true
    },
    emailVerified: {
        type: Boolean,
        default: false
    },
    info: {
        name: {
            givenName: String,  
            familyName: String,
        },
        address: {
            street: String,
            city: String,
            state: String,
            zipCode: String
        },
        primaryPhone: String,
        cellPhone: String,
        website: String,
        licenseNumber: String,
        title: String,
        company: String
    },
    avatar: {
        type: String,
        default: '/images/avatar/default/contacts-128.png'
    },
    friends: [{ type: ObjectId, ref: User }],
    friendRequests: [{ type: ObjectId, ref: User }]
});

我有一个搜索功能,目前通过用户名或电子邮件进行搜索并且工作正常,但我希望它也可以通过用户searchName或familyName进行搜索。这是搜索功能......

module.exports.search = function(searchValue, callback) {
    var searchValue = new RegExp(`^${searchValue}`, 'i');
    var query = {
        $or: [
            {username: searchValue}, 
            {email: searchValue}
         // {givenName condition here...}
        ]
    }

    User.find(query, callback).limit(10);
}

我尝试了这个......但它没有用

{info.name.givenName: searchValue}

我尝试了其他一些荒谬的事情,但他们也失败了......

总结一下我的问题,我如何重构架构或查询以便能够针对user.info.name.givenName检查searchValue?

1 个答案:

答案 0 :(得分:0)

这样:

{'info.name.givenName': searchValue}

注意引号。

你很亲密:)