MongoDB /猫鼬在某些日期之间查询文档?

时间:2018-08-08 23:56:28

标签: node.js mongodb express mongoose

我希望它在某些日期之间获取文档,我知道我需要使用 $ and 运算符,但是现在我正在使用Querymen(MongoDB的中间件),我阅读了文档,但找不到任何相关内容。

我正在做什么:

router.get('/',
  token({ required: true }),
  query({
    after: {
      type: Date,
      paths: ['fecha'],
      operator: '$gte'
    },
    before: {
      type: Date,
      paths: ['fecha'],
      operator: '$lte'
    }
  }),
  index)

所以我的问题是如何使用$ and运算符

1 个答案:

答案 0 :(得分:0)

您无需在查询中使用$and运算符。代替这个:

{
  $and: [
    { yourDateField: { $lte: '2018-08-09' } },
    { yourDateField: { $gte: '2018-08-03' } },
  ]
}

您可以这样做:

{
  yourDateField: {
    $lte: '2018-08-09',
    $gte: '2018-08-03'
  }
}

因此您可以将此架构用于查询员

const querySchema = {
  after: {
    type: Date,
    paths: ['yourDateField'],
    operator: '$gte'
  },
  before: {
    type: Date,
    paths: ['yourDateField'],
    operator: '$lte'
  }
};

完整的示例可能看起来像这样:

const querymen = require('querymen');
const app = require('express')();

const querySchema = {
  after: {
    type: Date,
    paths: ['yourDateField'],
    operator: '$gte'
  },
  before: {
    type: Date,
    paths: ['yourDateField'],
    operator: '$lte'
  }
};

app.get('/', querymen.middleware(querySchema), (req, res) => {
  const { querymen: { query } } = req;
  res.json({ ok: true, query });
});

app.listen(8000, () => console.log('Up and running on http://localhost:8000'));

如果您仍然不确定为什么不使用$and运算符,请查看this answer