按时间更新查找Mongoose子文档

时间:2016-01-28 19:43:02

标签: node.js mongoose

我有两个Mongoose模式:

var ItemSchema = new Schema({  
    trade: {
        type: Schema.Types.ObjectId,
        ref: 'Trade'
    }
});

var Item = mongoose.model('Item', ItemSchema);

var TradeSchema = new Schema({
    expiresOn: {
        type: Date
    }
});

var Trade = mongoose.model('Trade', TradeSchema);

我正在尝试使用Item.find()来查找项目,如果其交易日期小于用户通过请求中的查询字符串传入的日期。我使用以下代码:

if (req.query.expiresBefore) {
    Item.find({
        'trade.expiresOn': {
            $lte: req.query.expiresBefore
        }
    }, function (err, trades) {
        console.log(trades)
    })
}

但是,我在console.log()调用中收到一个空数组。使用$ gte也会返回一个空数组(虽然我的研究告诉我,我需要使用$ lte作为我的目的)。通过匹配其子项(Trade)的属性(expiresOn)来查找项目文档需要做什么?

1 个答案:

答案 0 :(得分:0)

参考这个Stackoverflow question,你想做的事情是不可能的。我不知道你为什么要设置这样的模式,但是如果你想保持原样。我建议你做一些像下面这样的改动

var ItemSchema = new Schema({  
    trade: {
        type: Schema.Types.ObjectId,
        ref: 'Trade'
    }
});

var Item = mongoose.model('Item', ItemSchema);

var TradeSchema = new Schema({
    itemId: { //add this
        type: Schema.Types.ObjectId,
        ref: 'Item'
    },
    expiresOn: {
        type: Date
    }
});

var Trade = mongoose.model('Trade', TradeSchema);
if (req.query.expiresBefore) {
    Trade.
        find({
            'expiresOn': {
                $lte: req.query.expiresBefore
            }
        }).
        populate('itemId').
        exec(function (err, trades) {
            console.log(trades)
        });
}