根据mongoose js中的条件填充不起作用

时间:2013-04-03 06:08:26

标签: javascript node.js mongodb express mongoose

我有2个架构

var Schema = require('mongoose').Schema;
var DeviceSchema = new Schema({
    name: {
        type: String
    },
    code: {
        type: String,
        unique: true
    },
    os: {
        type: String
    },
    userEmail: {
        type: String
    },
    checkoutTime: {
        type: Date

    },
    tags: {
        type: [String]

    }

});
module.exports = DeviceSchema;

var Schema = require('mongoose').Schema;
var TrackHistorySchema = new Schema({
    userEmail: {
        type: String
    },
    device: {
        type: Schema.ObjectId,
        ref: 'Device',
        required: true
    },
    checkinTime: {
        type: Date
    },
    checkoutTime: {
        type: Date,
        'default': Date.now
    }

});
module.exports = TrackHistorySchema;

我有一个搜索曲目历史记录,其中包含用户电子邮件ID和设备名称。

如果我使用历史记录表中的电子邮件条件

,则此方法有效
TrackHistory.find({'userEmail': req.query.searchText})
                    .populate({path: 'device'})
                    .sort('-name')
                    .skip(page * maxHistoryPerPage)
                    .limit(maxHistoryPerPage)
                    .exec(next);

但如果我使用设备表中的设备名称标准

,它将无效
TrackHistory.find({})
                    .populate({path: 'device', match: {name: req.query.searchText}})
                    .sort('-name')
                    .skip(page * maxHistoryPerPage)
                    .limit(maxHistoryPerPage)
                    .exec(next);

我获取设备列为null的所有历史行,就像在mysql中的左连接一样。我想要一个类似功能的内连接,即如果设备名称不匹配,那么也不应显示相应的历史行。我尝试了mongoose文档的不同组合。试过where where子句。

我正在使用mongoose 3.6.2(截至目前最新版本)

编辑 - 添加模型代码

var mongoose = require('mongoose');
var DeviceSchema = require('../schemas/device');
var Device = mongoose.model('Device', DeviceSchema);
module.exports = Device;

var mongoose = require('mongoose');
var TrackHistorySchema = require('../schemas/track_history');
var TrackHistory = mongoose.model('TrackHistory', TrackHistorySchema);
module.exports = TrackHistory;

0 个答案:

没有答案