使用$ regex

时间:2017-03-28 19:09:41

标签: javascript node.js mongodb mongoose

比方说,我有以下模型:

    var advertise = mongoose.Schema({
    username: String,
    text: String,
    locations: Array,
    days: Array,
    phone: Object,
    images: Array,
    age: Number,
    height: String,
    sex: String,
    categories: Array,
    targetAudience: Array,
    prices: Array,
    creator: String,
    hairColor: Object,
    eyeColor: Object,
    breastSize: Object,
    bodyType: Object,
    advertiseType: Object,
    created: {type: Date, default: Date.now},
    is_active: {type: Number, default: 0},
    order_id: String
});

现在我有一个名为searchString的值。有没有办法可以使用searchString搜索所有字段?

现在我只知道使用$or键执行此操作。但是,这是不切实际的。

如下所示:

mongoose.models.advertise.find({$or: [{'username': {'$regex': searchString}}]}, function (err, advertise) {
    res.json(advertise)
})

注意我使用Node.js

1 个答案:

答案 0 :(得分:0)

如果您有能力创建$text index

var advertise = mongoose.Schema({
    username: String,
    text: String,
    locations: Array,
    days: Array,
    phone: Object,
    images: Array,
    age: Number,
    height: String,
    sex: String,
    categories: Array,
    targetAudience: Array,
    prices: Array,
    creator: String,
    hairColor: Object,
    eyeColor: Object,
    breastSize: Object,
    bodyType: Object,
    advertiseType: Object,
    created: {type: Date, default: Date.now},
    is_active: {type: Number, default: 0},
    order_id: String
});
advertise.index({ username: 'text', text: 'text', height: 'text', sex: 'text', creator: 'text', order_id: 'text' });

执行搜索:

mongoose.models.advertise.find({ $text : { $search : searchString } }, function (err, advertise) {
    res.json(advertise)
})

我没有真正尝试过,不要犹豫,纠正潜在的错误。