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