gpt4 book ai didi

javascript - Node.js 到 MongoDB : find by Date

转载 作者:可可西里 更新时间:2023-11-01 10:43:50 24 4
gpt4 key购买 nike

从 Node 到 MongoDB 的查找日期问题:

有人说 MongoDB 可能存储的不是 Date 对象,而是字符串,但我不确定如何检查或如何修复它。

在我的 turnys.js 文件中:

<p></p>

<pre><code>exports.findNeededTurnys = function(req, handler)
{
console.log("findNeededTurnys");
var key;
//var arg0 = {$or:[{start:{$lte:new Date()}, $where: "this.users.length == this.seats"}]};
var arg0 = {start:{$lte:new Date()}};
console.log("findNeededTurnys: arg0="+JSON.stringify(arg0));
turnydb.collection('turnys', function(err, collection)
{
collection.find(arg0, {safe:true}, function(err, result) {
if(err) console.log("findNeededTurnys: find: err="+err);
console.log("findNeededTurnys: find: result="+JSON.stringify(result));
handler.handle(result);
});
});
};
</code></pre>

<p></p>

日志文件显示来自 MongoDB 的空结果?

<p></p>

<pre><code>findNeededTurnys: arg0={"start":{"$lte":"2014-03-31T10:17:48.857Z"}}
findNeededTurnys: find: result={}
</code></pre>

<p></p>

在 Mongo 中,查询有效(在添加新的 Date 调用程序之后,因为驱动程序可能会在 js console.log 中抽象它):

<p></p>

<pre><code>> db.turnys.find({"start":{"$lte":"2014-03-31T10:17:48.857Z"}});
> db.turnys.find({"start":{"$lte":new Date("2014-03-31T10:17:48.857Z")}});
{ "gId" : ObjectId("5335e4a7b8cf51bcd054b423"), "seats" : 2, "start" : ISODate("2014-03-31T08:47:48.946Z"), "end" : ISODate("2014-03-31T08:49:48.946Z"), "rMin" : 800, "rMax" : 900, "users" : [ ], "_id" : ObjectId("53392bb42b70450000a834d8") }
</code></pre>

<p></p>

//这是 mongo 数据库的示例

<p></p>

<pre><code>[
{
"gId": "5335e4a7b8cf51bcd054b423",
"seats": 2,
"start": "2014-03-31T08:47:48.946Z",
"end": "2014-03-31T08:49:48.946Z",
"rMin": 800,
"rMax": 900,
"users": [],
"_id": "53392bb42b70450000a834d8"
},
{
"gId": "5335e4a7b8cf51bcd054b423",
"seats": 2,
"start": "2014-03-31T08:47:48.946Z",
"end": "2014-03-31T08:49:48.946Z",
"rMin": 1000,
"rMax": 1100,
"users": [],
"_id": "53392bb42b70450000a834da"
},
...
]
</code></pre>

<p></p>

最佳答案

您不需要任何包装。日期是一个日期:

var zeroth = {$or:[ {start: new Date(), {users:{$size:2}} ]}; 

当然,如果您文档中的那些“日期”实际上是“字符串”并且不是正确的date 类型,那么这就是您的问题。而您真正需要做的是修复这些值,使它们成为真实日期。

这适用于任何语言实现,您应该使用 native “日期”类型并让驱动程序为您进行转换。

如何判断字段是否为字符串

很明显的区别是,当您在 mongo shell 中查看文档时,如果它是真正的 BSON 日期类型,那么它将如下所示:

"start": ISODate("2014-03-31T08:47:48.946Z"),

如果还不够清楚,还有 $type您可以在这样的查询中使用的运算符:

db.collection.find({ "start": { "$type": 2 } }).count()

如果它是一个字符串,它也不是 MongoDB 正在执行此操作,而是应用程序或导入中的错误实现负责创建它。这就是最初回复中提出的要点。

关于javascript - Node.js 到 MongoDB : find by Date,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22747810/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com