【问题标题】:Finding Mongoose subdocument by time updated按更新时间查找 Mongoose 子文档
【发布时间】:2016-02-01 01:10:23
【问题描述】:

我有两个 Mongoose Schema:

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)来查找项目文档?

【问题讨论】:

    标签: node.js mongoose


    【解决方案1】:

    参考这个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)
            });
    }
    

    【讨论】:

      猜你喜欢
      • 2014-11-27
      • 2021-12-23
      • 2013-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-15
      • 2020-06-11
      • 2017-03-17
      相关资源
      最近更新 更多