我有以下字段:
_id: {
    contents: [{
        duration: "4",
        startDate : "2020-10-14",
    }, {
        duration: "15",
        startDate : "2020-11-17",
    }], 
}我需要找到将在未来10天内过期的内容。这是我必须遵循的逻辑:
db.collection.find() 
    If duration > 10 =>  
        If ((duration - 10) + startDate) ==== today但是我不能将持续时间或startDate转换为数字,甚至不能正确地处理条件
发布于 2021-07-21 04:14:39
为此,我在我的mongo local中创建了一个集合,其中包含一个字段,其中的数字如下图所示

现在要找出大于2....的持续时间之和。

现在,正如您在上面看到的,诀窍是将比较器也视为字符串。Lemme也可以使用mongoose附加节点代码段
var mongoose = require('mongoose');
var mongoDB = 'mongodb://127.0.0.1/my_database';
mongoose.connect(mongoDB, {useNewUrlParser: true, useUnifiedTopology: true});
var db = mongoose.connection;
var Schema = mongoose.Schema;
var SomeModelSchema = new Schema({
    duration: String
});
var SomeModel = mongoose.model('SomeModel', SomeModelSchema );
SomeModel.aggregate([{ $match: {duration: { $gt : "2" }}},{ $group: { _id : null, sum: { $sum: {$toDouble: "$duration" }} } }], function(err, data){
    console.log(data)
});
  
db.on('error', console.error.bind(console, 'MongoDB connection error:'));发布于 2021-07-21 04:39:14
字符串不能利用索引的数字操作。如果表太大,可能会导致查询速度非常慢。
问题1:为什么字段是以字符串形式插入(只是好奇)问题2:为什么不更新all以添加一个新字段‘exactly’,并精确到时刻(日期或Unix时间)。通过这种方式,数据库很容易找到这些记录。
https://stackoverflow.com/questions/68459978
复制相似问题