1

私は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);

mysql の左結合のように、デバイス列が null の履歴のすべての行を取得しています。内部結合のような機能が必要でした。つまり、デバイス名が一致しない場合、対応する履歴行も表示されません。マングースのドキュメントからさまざまな組み合わせを試しました。where句も試しました。

私はマングース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;
4

0 に答える 0