Javascript mongoose数据库中的数据查询

Javascript mongoose数据库中的数据查询,javascript,express,mongoose,Javascript,Express,Mongoose,我目前正在尝试查询数据,以便它只返回id为bWYqm6 Oo的项目(截至目前,我只有一个项目),这两个日期分别为2019-09-19和2019-09-22。在这种情况下,它应该只返回数据库中的前3项。我提出了一个查询,但它只返回一个空数组。有人知道怎么解决这个问题吗?先谢谢你 var findBy = { _id : bWYqm6-Oo, exercises : [ { date: { $gte: 2019-09-19,

我目前正在尝试查询数据,以便它只返回id为bWYqm6 Oo的项目(截至目前,我只有一个项目),这两个日期分别为2019-09-19和2019-09-22。在这种情况下,它应该只返回数据库中的前3项。我提出了一个查询,但它只返回一个空数组。有人知道怎么解决这个问题吗?先谢谢你

var findBy = {
    _id : bWYqm6-Oo,
    exercises : [
      {
        date: {
          $gte: 2019-09-19,
          $lt: 2019-09-22
        }
      }
    ]
  }
  UserModel.find(findBy).limit(5).exec((err, data) => {
      (err) ? res.json({"error" : "problem searching for exercises: " + err}) :  res.json(data);      
  });
我的数据库如下所示:

{
    _id: "bWYqm6-Oo",
    user: "rommy",
    exersises: [
        {
        user_id: "bWYqm6-Oo",
        date: "2019-09-20T00:00:00.000Z",
        description: "stiup",
        duration: "22",
        _id: "pu90D-dHx"
        },
        {
        user_id: "bWYqm6-Oo",
        date: "2019-09-21T00:00:00.000Z",
        description: "pushup",
        duration: "22",
        _id: "YtfsJLOXb"
        },
        {
        user_id: "bWYqm6-Oo",
        date: "2019-09-20T00:00:00.000Z",
        description: "stiup",
        duration: "22",
        _id: "pu90D-dHx"
        },
        {
        user_id: "bWYqm6-Oo",
        date: "2019-09-24T00:00:00.000Z",
        description: "stiup",
        duration: "22",
        _id: "pu90D-dHx"
        }
    ],
    __v: 9
}
var query = {
  'exercises.date': {$gte: '2019-09-22', $lt: '2019-09-22'}
}
下面是我调用server.js文件中的文件的地方:

一些事情:

文档上的字段
\u id
在mongo中始终是唯一的,因此在您的查询中是唯一的

var findBy = {
    _id : bWYqm6-Oo,
    exercises : [
      {
        date: {
          $gte: 2019-09-22,
          $lt: 2019-09-22
        }
      }
    ]
  }
这部分是多余的

exercises : [
      {
        date: {
          $gte: 2019-09-22,
          $lt: 2019-09-22
        }
      }
    ]

因为只有一个文档的
\u id
'bWYqm6-Oo'

如果要使用日期范围进行查询,可以执行以下操作:

{
    _id: "bWYqm6-Oo",
    user: "rommy",
    exersises: [
        {
        user_id: "bWYqm6-Oo",
        date: "2019-09-20T00:00:00.000Z",
        description: "stiup",
        duration: "22",
        _id: "pu90D-dHx"
        },
        {
        user_id: "bWYqm6-Oo",
        date: "2019-09-21T00:00:00.000Z",
        description: "pushup",
        duration: "22",
        _id: "YtfsJLOXb"
        },
        {
        user_id: "bWYqm6-Oo",
        date: "2019-09-20T00:00:00.000Z",
        description: "stiup",
        duration: "22",
        _id: "pu90D-dHx"
        },
        {
        user_id: "bWYqm6-Oo",
        date: "2019-09-24T00:00:00.000Z",
        description: "stiup",
        duration: "22",
        _id: "pu90D-dHx"
        }
    ],
    __v: 9
}
var query = {
  'exercises.date': {$gte: '2019-09-22', $lt: '2019-09-22'}
}

希望能有所帮助。

@GregHerbowicz不幸的是,当我删除方括号时,我仍然得到一个空数组。我得到了以下错误:MongoError:unknown operator:$and" . 我使用的是mongoose 5.4.11和express 5.0.0-alpha.2。语法没有问题,所以不确定。您的查询是什么样子的?嗨,Isaac,我仍然得到这个错误:不能使用$and和Date。我在模式中使用了日期。@罗杰,你是说那个用户的
练习
?这是因为您正在查询
用户
,它将返回所有
用户
,并在这些日期之间进行练习。如果是这样,
练习
应该是它自己的集合。如果没有,那么在练习上存储
user\u id
就没有意义了。@收到,您已经在搜索具有特定练习的用户了。我想你想要的只是找到一些特定的练习。如果我是你,只要你有了
用户
,我就会用代码过滤练习。另一种选择是让
练习
成为自己的集合,并像以前一样使用
用户id
和日期范围进行搜索。或者,您可以执行聚合查询,并根据需要执行
$project