MongoDB按月和年查找过滤器

时间:2019-01-23 20:41:52

标签: node.js mongodb mongodb-query

此查询可用于过滤12/2018帖子。

db.collection.find({
  "$expr": {
    "$eq": [{ "$year": "$timestamp" }, 2018],
    "$eq": [{ "$month": "$timestamp" }, 12]
  }
});

但是,如果我反转年份和月份,则会显示所有2018年的帖子。

db.collection.find({
  "$expr": {
    "$eq": [{ "$month": "$timestamp" }, 12],
    "$eq": [{ "$year": "$timestamp" }, 2018]
  }
});

那是为什么?我不明白。

1 个答案:

答案 0 :(得分:1)

JavaScript对象的同名键不能超过一个,但是您在这里两次使用$eq键,因此仅使用第二个。

相反,请使用$and组合两个表达式:

db.collection.find({
  "$expr": {
    "$and": [
      {"$eq": [{ "$year": "$timestamp" }, 2018]},
      {"$eq": [{ "$month": "$timestamp" }, 12]}
    ]
  }
});