Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 一个查询中的多个查找条件不起作用_Node.js_Mongodb - Fatal编程技术网

Node.js 一个查询中的多个查找条件不起作用

Node.js 一个查询中的多个查找条件不起作用,node.js,mongodb,Node.js,Mongodb,我正试图从我的节点js代码中运行mongodb查询。查询是为了获取介于日期范围和匹配作为文档一部分的用户id之间的文档 我试过下面的问题。它们都不起作用。但如果我只查询日期,或者只查询用户ID,它就可以工作。组合不起作用 我的文件结构如下: { _id: 5d7e5dd0a7eef002f486863a, userId: 5d7e5dd0a7eef002f4868639, date: 2019-09-15T15:50:40.250Z, ... }, { _id: 5d862abf6d083d24

我正试图从我的节点js代码中运行mongodb查询。查询是为了获取介于日期范围和匹配作为文档一部分的用户id之间的文档

我试过下面的问题。它们都不起作用。但如果我只查询日期,或者只查询用户ID,它就可以工作。组合不起作用

我的文件结构如下:

{
_id: 5d7e5dd0a7eef002f486863a,
userId: 5d7e5dd0a7eef002f4868639,
date: 2019-09-15T15:50:40.250Z,
...
},
{
_id: 5d862abf6d083d24c06adbb8,
userId: 5d86684f84adde0120ad5023,
date: 2019-09-21T13:50:55.010Z,
...
}
我试过的问题是

db.collection.find({"date":{'$gte':ISODate('2019-09-14T18:03:13.525Z'),'$lt':ISODate('2019-09-21T18:03:13.525Z')},"userId":ObjectId("5d86684f84adde0120ad5023")})

{$and:[{"date":{'$gte':ISODate('2019-09-14T18:03:13.525Z'),'$lt':ISODate('2019-09-21T20:03:13.525Z')}},{userId:ObjectId("5d86684f84adde0120ad5023")}]}

db.collection.aggregate([
                    { $match: { userId: ObjectId("5d86684f84adde0120ad5023"), date :{'$gte':ISODate('2019-09-14T18:03:13.525Z'),'$lt':ISODate('2019-09-21T20:03:13.525Z')} } }])
我希望返回的文档的日期介于范围和用户ID之间


提前感谢

对于查找基于$and运算符的文档,下面的查询似乎工作正常:

db.getCollection('transactionlogs').find({$and:[{"createdAt":{'$gte':ISODate('2018-11-17T12:17:00Z'),'$lt':ISODate('2019-09-21T20:03:13.525Z')}},{_id:ObjectId("5bf006e3519f46d2eb075959")}]})

您可能无法获得预期结果的原因是,上述查询最多只返回1条记录。因为,ObjectId属性“很可能”是唯一的。

文档中的dates
date
字段是否存储为date对象?还是字符串?它只存储为日期对象
newdate().toISOString()
这就是你的问题。这些不是BSON日期(正如
ISODate()
函数所产生的,这实际上与shell的
Date
相同),但实际上现在是“字符串”,因为
toISOString()
就是这样做的。你真的应该只存储为
new Date()
。你现在基本上需要:
.find({“Date”:{“$gte”:“2019-09-14T18:03:13.525Z”,“$lte”:“2019-09-21T18:03:13.525Z”},“userId”:ObjectId(“5D86684F84Add0120AD5023”)
,以便根据“字符串”进行匹配。如果在存储.FYI时类似地调用了
toString()
,则可能会忽略
ObjectId
。如果您使用的是MongoDB 4.2或更高版本,则可以使用快速更新语句修复数据。i、 e
db.collection.updateMany({},[{“$set”:{“date”:{“$toDate”:“$date”}}])
。这将使用新的聚合管道语法来应用
$toDate
方法,并将“字符串”转换为实际的BSON日期。那么您最初的查询尝试将确实起作用。OP不是要求搜索
\u id
(这当然是唯一的),而是要求搜索
userid
。由于OP自己的评论,实际问题非常明显。