- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
这是我必须制作该应用程序的所有代码。因此,我可以从csv文件导入数据/记录,也可以从localhost:3000的应用程序手动插入数据,并将其插入数据库中。从那里,我将能够从这里查询。错误位于底部的server.js中。批量和平均似乎都没有执行。
server.js,其中包含批量(用于1000个数据及更多数据)和平均查询(air_temperature)
var express = require('express');
var app = express();
var mongojs = require('mongojs');
var db = mongojs('meibanlist', ['meibanlist']);
var bodyParser = require('body-parser');
app.use(express.static(__dirname + '/public'));
app.use(bodyParser.json());
app.get('/meibanlist', function (req, res) {
console.log('I received a GET request');
db.meibanlist.find(function (err, docs) {
console.log(docs);
res.json(docs);
});
});
app.post('/meibanlist', function (req, res) {
console.log(req.body);
db.meibanlist.insert(req.body, function(err, doc) {
res.json(doc);
});
});
app.delete('/meibanlist/:id', function (req, res) {
var id = req.params.id;
console.log(id);
db.meibanlist.remove({_id: mongojs.ObjectId(id)}, function (err, doc) {
res.json(doc);
});
});
app.get('/meibanlist/:id', function (req, res) {
var id = req.params.id;
console.log(id);
db.meibanlist.findOne({_id: mongojs.ObjectId(id)}, function (err, doc) {
res.json(doc);
});
});
app.put('/meibanlist/:id', function (req, res) {
var id = req.params.id;
console.log(req.body.machine_unit);
db.meibanlist.findAndModify({
query: {_id: mongojs.ObjectId(id)},
update: {$set: {machine_unit: req.body.machine_unit, air_temperature: req.body.air_temperature, water_temperature: req.body.water_temperature, heat_temperature: req.body.heat_temperature, room_temperature: req.body.room_temperature, date: req.body.date, time: req.body.time}},
new: true}, function (err, doc) {
res.json(doc);
}
);
});
var cursor = db.meibanlist.find({"air_temperature": { "$exists": true, "$type": 2 }}),
bulkUpdateOps = [];
cursor.forEach(function(doc){
var newTemp = parseInt(doc.air_temperature, 10);
bulkUpdateOps.push({
"updateOne": {
"filter": { "_id": doc._id },
"update": { "$set": { "air_temperature": newTemp } }
}
});
if (bulkUpdateOps.length === 500) {
db.meibanlist.bulkWrite(bulkUpdateOps);
bulkUpdateOps = [];
}
});
if (bulkUpdateOps.length > 0) { db.meibanlist.bulkWrite(bulkUpdateOps); }
db.meibanlist.aggregate([
{
"$group": {
"_id": null,
"averageAirTemperature": { "$avg": "$air_temperature" }
}
}
], function(err, results){
if (err || !results) console.log ("record not found");
else console.log(results[0]["averageAirTemperature"]);
});
app.listen(3000);
console.log("Server running on port 3000");
<!DOCTYPE>
<html ng-app="myApp">
<head>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap-theme.min.css">
<title>Meiban App</title>
</head>
<body>
<div class="container" ng-controller="AppCtrl">
<h1>Meiban App</h1>
<table class="table">
<thead>
<tr>
<th>Machine unit</th>
<th>Air Temperature</th>
<th>Water Temperature</th>
<th>Heat Temperature</th>
<th>Room Temperature</th>
<th>Date</th>
<th>Time</th>
<th>Action</th>
<th> </th>
</tr>
</thead>
<tbody>
<tr>
<td><input class="form-control" ng-model="contact.machine_unit"></td>
<td><input class="form-control" ng-model="contact.air_temperature"></td>
<td><input class="form-control" ng-model="contact.water_temperature"></td>
<td><input class="form-control" ng-model="contact.heat_temperature"></td>
<td><input class="form-control" ng-model="contact.room_temperature"></td>
<td><input class="form-control" ng-model="contact.date"></td>
<td><input class="form-control" ng-model="contact.time"></td>
<td><button class="btn btn-primary" ng-click="addCollection()">Add Collection</button></td>
<td><button class="btn btn-info" ng-click="update()">Update</button> <button class="btn btn-info" ng-click="deselect()">Clear</button></td>
</tr>
<tr ng-repeat="contact in collection">
<td>{{contact.machine_unit}}</td>
<td>{{contact.air_temperature}}</td>
<td>{{contact.water_temperature}}</td>
<td>{{contact.heat_temperature}}</td>
<td>{{contact.room_temperature}}</td>
<td>{{contact.date}}</td>
<td>{{contact.time}}</td>
<td><button class="btn btn-danger" ng-click="remove(contact._id)">Remove</button></td>
<td><button class="btn btn-warning" ng-click="edit(contact._id)">Edit</button></td>
</tr>
</tbody>
</table>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.12/angular.min.js"></script>
<script src="controller/controller.js"></script>
</body>
</html>
var myApp = angular.module('myApp', []);
myApp.controller('AppCtrl', ['$scope', '$http', function($scope, $http) {
console.log("Hello World from controller");
var refresh = function() {
$http.get('/meibanlist').success(function(response) {
console.log("I got the data I requested");
$scope.meibanlist = response;
$scope.contact = "";
});
};
refresh();
$scope.addCollection = function() {
console.log($scope.contact);
$http.post('/meibanlist', $scope.contact).success(function(response) {
console.log(response);
refresh();
});
};
$scope.remove = function(id) {
console.log(id);
$http.delete('/meibanlist/' + id).success(function(response) {
refresh();
});
};
$scope.edit = function(id) {
console.log(id);
$http.get('/meibanlist/' + id).success(function(response) {
$scope.contact = response;
});
};
$scope.update = function() {
console.log($scope.contact._id);
$http.put('/meibanlist/' + $scope.contact._id, $scope.contact).success(function(response) {
refresh();
})
};
$scope.deselect = function() {
$scope.contact = "";
}
}]);
最佳答案
正如文档所指出的那样, $avg
运算符分两个管道步骤工作,即 $project
和 $group
阶段。相信您需要在 $avg
管道中使用 $group
累加器,因为您需要所有价格的平均值。
在 $group
阶段中使用时, $avg
返回所有数值的总平均值,这些数值是通过将指定的表达式应用于一组由_id
字段指出的键共享相同组的文档中的每个文档而得到的。_id
字段是必填字段;但是,由于您要整体计算所有输入文档的累积平均值,因此可以将_id
的值指定为null
:
db.database.aggregate([
{
"$group": {
"_id": null,
"Average": { "$avg": "$price" }
}
}
], function(err, results){
if (err !results) console.log ("record not found");
else console.log(results[0]["Average"]);
});
$avg
无法正常工作的原因。
update()
方法将字符串值转换为数字值。此处的概念是
loop through your collection with a cursor,对于光标内的每个文档,请使用
$set
以及
的新值 parseInt()
来更新文档。
forEach()
方法来迭代它并更新集合中符合特定条件的每个文档,从而实现上述直觉。
db.meibanlist.find({"air_temperature": { "$exists": true, "$type": 2 }})
.snapshot()
.forEach(function(doc){
var newTemp = parseInt(doc.air_temperature, 10);
db.meibanlist.updateOne(
{ "_id": doc._id },
{ "$set": { "air_temperature": newTemp } }
);
});
Bulk()
API批量更新集合。
Bulk()
和
>= 2.6
中提供的
< 3.2
API。
var bulkUpdateOps = db.meibanlist.initializeUnOrderedBulkOp(),
counter = 0;
db.meibanlist.find({"air_temperature": { "$exists": true, "$type": 2 }})
.snapshot()
.forEach(function(doc){
var newTemp = parseInt(doc.air_temperature, 10);
bulkUpdateOps.find({ "_id": doc._id })
.update({ "$set": { "air_temperature": newTemp } })
counter++; // increment counter for batch limit
if (counter % 500 === 0) {
// execute the bulk update operation in batches of 1000
bulkUpdateOps.execute();
// Re-initialize the bulk update operations object
bulkUpdateOps = db.meibanlist.initializeUnOrderedBulkOp();
}
})
// Clean up remaining operation in the queue
if (counter % 500 !== 0) { bulkUpdateOps.execute(); }
Bulk()
API,并使用
bulkWrite()
提供了一组较新的api。
forEach()
游标方法通过批量操作创建数组,以将每个批量写入文档推入数组。由于写命令最多只能接受1000个操作,
var cursor = db.meibanlist.find({"air_temperature": { "$exists": true, "$type": 2 }}),
bulkUpdateOps = [];
cursor.forEach(function(doc){
var newTemp = parseInt(doc.air_temperature, 10);
bulkUpdateOps.push({
"updateOne": {
"filter": { "_id": doc._id },
"update": { "$set": { "air_temperature": newTemp } }
}
});
if (bulkUpdateOps.length === 500) {
db.meibanlist.bulkWrite(bulkUpdateOps);
bulkUpdateOps = [];
}
});
if (bulkUpdateOps.length > 0) { db.meibanlist.bulkWrite(bulkUpdateOps); }
$avg
函数中愉快地应用
aggregate()
运算符。以下将返回所有合并文档的平均
air_temperature
:
db.meibanlist.aggregate([
{
"$group": {
"_id": null,
"averageAirTemperature": { "$avg": "$air_temperature" }
}
}
], function(err, results){
if (err !results) console.log ("record not found");
else console.log(results[0]["averageAirTemperature"]);
});
function bulkUpdate(collection, callback)
var ops = [];
collection.find({
"air_temperature": { "$exists": true, "$type": 2 }
}, function (err, docs) {
docs.forEach(function(doc){
ops.push({
"updateOne": {
"filter": { "_id": doc._id },
"update": {
"$set": {
"air_temperature": parseInt(doc.air_temperature, 10),
"water_temperature": parseInt(doc.water_temperature, 10),
"heat_temperature": parseInt(doc.heat_temperature, 10),
"room_temperature": parseInt(doc.room_temperature, 10)
}
}
}
});
if (ops.length === 500) {
collection.bulkWrite(bulkUpdateOps, function(err, result){
if (err) callback(err);
callback(null, result);
});
ops = [];
}
});
if (ops.length > 0) {
collection.bulkWrite(ops, function(err, result){
callback(null, result);
});
}
});
}
function getAverageTemps(collection, callback) {
collection.aggregate([
{
"$group": {
"_id": null,
"averageAirTemperature": { "$avg": "$air_temperature" },
"averageWaterTemperature": { "$avg": "$water_temperature" },
"averageHeatTemperature": { "$avg": "$heat_temperature" },
"averageRoomTemperature": { "$avg": "$room_temperature" }
}
}
], function(err, results){
if (err || !results) callback(err);
else callback(null, results);
});
}
app.get('/meibanlist/averagetemps', function (req, res) {
getAverageTemps(db.meibanlist, function (err, temps) {
if (err || !temps) console.log ("record not found");
else res.json(temps);
});
});
关于javascript - 简单的$ avg查询Node.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41436078/
我正在努力实现以下目标, 假设我有字符串: ( z ) ( A ( z ) ( A ( z ) ( A ( z ) ( A ( z ) ( A ) ) ) ) ) 我想编写一个正则
给定: 1 2 3 4 5 6
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
大家好,我卡颂。 Svelte问世很久了,一直想写一篇好懂的原理分析文章,拖了这么久终于写了。 本文会围绕一张流程图和两个Demo讲解,正确的食用方式是用电脑打开本文,跟着流程图、Demo一
身份证为15位或者18位,15位的全为数字,18位的前17位为数字,最后一位为数字或者大写字母”X“。 与之匹配的正则表达式: ?
我们先来最简单的,网页的登录窗口; 不过开始之前,大家先下载jquery的插件 本人习惯用了vs2008来做网页了,先添加一个空白页 这是最简单的的做法。。。先在body里面插入 <
1、MySQL自带的压力测试工具 Mysqlslap mysqlslap是mysql自带的基准测试工具,该工具查询数据,语法简单,灵活容易使用.该工具可以模拟多个客户端同时并发的向服务器发出
前言 今天大姚给大家分享一款.NET开源(MIT License)、免费、简单、实用的数据库文档(字典)生成工具,该工具支持CHM、Word、Excel、PDF、Html、XML、Markdown等
Go语言语法类似于C语言,因此熟悉C语言及其派生语言( C++、 C#、Objective-C 等)的人都会迅速熟悉这门语言。 C语言的有些语法会让代码可读性降低甚至发生歧义。Go语言在C语言的
我正在使用快速将 mkv 转换为 mp4 ffmpeg 命令 ffmpeg -i test.mkv -vcodec copy -acodec copy new.mp4 但不适用于任何 mkv 文件,当
我想计算我的工作簿中的工作表数量,然后从总数中减去特定的工作表。我错过了什么?这给了我一个对象错误: wsCount = ThisWorkbook.Sheets.Count - ThisWorkboo
我有一个 perl 文件,用于查看文件夹中是否存在 ini。如果是,它会从中读取,如果不是,它会根据我为它制作的模板创建一个。 我在 ini 部分使用 Config::Simple。 我的问题是,如果
尝试让一个 ViewController 通过标准 Cocoa 通知与另一个 ViewController 进行通信。 编写了一个简单的测试用例。在我最初的 VC 中,我将以下内容添加到 viewDi
我正在绘制高程剖面图,显示沿路径的高程增益/损失,类似于下面的: Sample Elevation Profile with hand-placed labels http://img38.image
嗨,所以我需要做的是最终让 regStart 和 regPage 根据点击事件交替可见性,我不太担心编写 JavaScript 函数,但我根本无法让我的 regPage 首先隐藏。这是我的代码。请简单
我有一个非常简单的程序来测量一个函数花费了多少时间。 #include #include #include struct Foo { void addSample(uint64_t s)
我需要为 JavaScript 制作简单的 C# BitConverter。我做了一个简单的BitConverter class BitConverter{ constructor(){} GetBy
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
我是 Simple.Data 的新手。但我很难找到如何进行“分组依据”。 我想要的是非常基本的。 表格看起来像: +________+ | cards | +________+ | id |
我现在正在开发一个 JS UDF,它看起来遵循编码。 通常情况下,由于循环计数为 2,Alert Msg 会出现两次。我想要的是即使循环计数为 3,Alert Msg 也只会出现一次。任何想法都
我是一名优秀的程序员,十分优秀!