gpt4 book ai didi

javascript - 通过输入表单查询 MongoDB

转载 作者:行者123 更新时间:2023-12-03 05:19:21 25 4
gpt4 key购买 nike

我有一个 MongoDB 聚合框架,它使用 startDateendDateintervalValue 来查询我的数据库。然而这些变量是硬编码的。我想使用日期选择器从网页发送 startDateendDateintervalValue

我最初认为我应该拆分 JS 文件。一个处理来自网页的请求,另一个处理 GET 函数。不幸的是我已经走进了死胡同。我无法在 test.js 中使用 sandbox.js 中声明的变量。

此外,我对如何构造 JS 文件以输入日期并显示输出有点困惑。

sandbox.js

function myTime() {


var startValue = document.getElementById("startTime").value;
var endValue = document.getElementById("endTime").value;
var intervalValue = document.getElementById("interval").value;
var startDate = new Date("1/1/2015 " + startValue);
var endDate = new Date("1/1/2015 " + endValue);
var offset = intervalValue * 1000 * 60;
}

test.js

{ $match : { datetime : { $gt : startDate, $lt : endDate } } },
{
$group: {
_id:{
"$add": [
{ "$subtract": [
{ "$subtract": [ "$datetime", new Date(0) ] },
{ "$mod": [
{ "$subtract": ["$datetime" , new Date(0) ] },
offset]}] },
new Date(0)
]},
Humidity: {$avg: "$humidity"},
Temperature: {$avg: "$temperature"}

},
},

{ $project : { _id : 1 , Humidity : 1, Temperature: 1 } },
// { $limit : 10 },
{ $sort : {"_id":1, "Humidity":1, "Temperature": 1}}

如果我能得到一些帮助,我会很高兴。谢谢

最佳答案

首先,您需要确保这两个文件都包含在您正在加载的 HTML 页面(即您的表单)中。

接下来,我看到您的 test.js 文件只是一个 JSON 对象。

我建议更改此设置,以便您通过函数调用返回 JSON 对象。这将允许您将收集到的输入传递到函数中,以返回所需的 JSON 对象以发送到 Mongo。

我建议尝试以下更改:

sandbox.js 更改

function myTime() {
var result = {}
result.startValue = document.getElementById("startTime").value;
result.endValue = document.getElementById("endTime").value;
result.intervalValue = document.getElementById("interval").value;
result.startDate = new Date("1/1/2015 " + startValue);
result.endDate = new Date("1/1/2015 " + endValue);
result.offset = intervalValue * 1000 * 60;
return result;
}

这将允许您将所有变量放入结果中,以传递到 test.js 文件

test.js 更改

function getMongoObject(values) {
return { "$match" : { "datetime" : { "$gt" : values.startDate, "$lt" : values.endDate } } },
{
"$group": {
"_id":{
"$add": [
{ "$subtract": [
{ "$subtract": [ "$datetime", new Date(0) ] },
{ "$mod": [
{ "$subtract": ["$datetime" , new Date(0) ] },
values.offset]}] },
new Date(0)
]},
"Humidity": {$avg: "$humidity"},
"Temperature": {$avg: "$temperature"}

},
},

{ "$project" : { "_id" : 1 , "Humidity" : 1, "Temperature": 1 } },
// { "$limit" : 10 },
{ "$sort" : {"_id":1, "Humidity":1, "Temperature": 1}}
}

test.js 文件进行这些更改后,您可以在想要获取要传递给 Mongo 的 JSON 对象的位置执行以下命令。

var mongoValues = getTime();
var mongoObject = getMongoObject(mongoValues);

现在您可以使用mongoObject发送到数据库。

更新:方法 2:

如果您不想将变量发送到 test.js 文件,则需要将 sandbox.js 文件中的变量设为全局变量。目前它们是“私有(private)的”(仅限于该函数)

尝试对 sandbox.js 进行这些更改

var startValue, endValue, intervalValue, startDate, endDate, offset;
function myTime() {
startValue = document.getElementById("startTime").value;
endValue = document.getElementById("endTime").value;
intervalValue = document.getElementById("interval").value;
startDate = new Date("1/1/2015 " + startValue);
endDate = new Date("1/1/2015 " + endValue);
offset = intervalValue * 1000 * 60;
}

在我看来,选项 1 仍然更好,因为它允许您控制绑定(bind)到要传递给 Mongo 的 JSON 对象的变量。

使用此方法,由于调用 test.js 时未设置变量或由于变量被意外覆盖,您可能会意外地在 JSON 对象中获得不同的结果。

更新3

为了访问 test.js 文件中的 startDate 和其他变量,您需要将 JSON 对象设为变量。

我已经制作了一个 github 存储库来进行测试,以向您展示我的意思,请在此处查看: https://github.com/NewteqDeveloper/so-q-41462690在此示例中,您将注意到警报显示 2。(开始日期 + 1)。

有关更多信息,请查看此 stackoverflow 页面:Can I access variables from another file? .

需要注意的一个重要事项是,您需要在 html 页面中的 test.js 文件之前包含 sandbox.js 文件。

关于javascript - 通过输入表单查询 MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41462690/

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