- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
大家早上好
我正在为我的公司开发一个 java 实用程序来监视 MariaDB 数据库并在 Mongo 数据库中写入统计信息,并且该实用程序必须每 6 小时在 cronjob 中运行一次。于是我搭建了环境,在mongo DB上也能正确写入。但是我有一个问题...... mongo db 有一个名为 stats
的集合,其中 daily_stats
字段类型为数组,在第一次填充它之后我不知道如何通过向 daily_stats
字段添加元素来更新它。
您有什么建议或建议吗?
我的代码
package com.mspay;
import java.net.UnknownHostException;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientException;
import com.mongodb.MongoClientURI;
import com.mongodb.MongoException;
import com.mongodb.ServerAddress;
import com.mongodb.WriteConcern;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
import java.util.ArrayList;
import java.util.HashMap;
import org.bson.*;
import java.util.Date;
import java.time.LocalDate;
import java.util.Arrays;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import com.mongodb.BasicDBList;
import com.mongodb.DBCursor;
import com.mongodb.Block;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.Updates;
import com.mongodb.client.MongoCursor;
import static com.mongodb.client.model.Filters.*;
import com.mongodb.client.result.DeleteResult;
import static com.mongodb.client.model.Updates.*;
import com.mongodb.client.result.UpdateResult;
import java.util.List;
import java.text.SimpleDateFormat;
import java.sql.*;
public class MongoUtility {
static private String host;
static private String uname;
static private String psw;
static private String db;
static private String comune;
// costruttore
public MongoUtility(String h, String usr, String pass, String database, String nomeC) {
host = h;
uname = usr;
psw = pass;
db = database;
comune = nomeC;
}
public void WriteOnDB(ResultSet rs) throws SQLException{
Integer nulle = 0, A401 = 0, A402 = 0, A406 = 0, ANNULLO = 0, CN01 = 0, F401 = 0, F4BPER2 = 0, IGNOTO = 0,
Q41 = 0, Q42 = 0;
try{
String caso = null;
MongoClient mongoClient = new MongoClient(host , 27017);
DB database = mongoClient.getDB(db);
DBCollection collection = database.getCollection("stats");
Date d = new Date();
d.getTime();
//recupero i valori giornalieri delle deleghe
while(rs.next()){
caso = rs.getString(1);
if (!rs.getString(2).equals("0")) {
nulle = Integer.parseInt(rs.getString(2));
} else if (caso.equals("A401")) {
A401 = Integer.parseInt(rs.getString(3));
} else if (caso.equals("A402")) {
A402 = Integer.parseInt(rs.getString(3));
} else if (caso.equals("A406")) {
A406 = Integer.parseInt(rs.getString(3));
} else if (caso.equals("ANNULLO")) {
ANNULLO = Integer.parseInt(rs.getString(3));
} else if (caso.equals("CN01")) {
CN01 = Integer.parseInt(rs.getString(3));
} else if (caso.equals("F401")) {
F401 = Integer.parseInt(rs.getString(3));
} else if (caso.equals("F4BPER02")) {
F4BPER2 = Integer.parseInt(rs.getString(3));
} else if (caso.equals("IGNOTO")) {
IGNOTO = Integer.parseInt(rs.getString(3));
} else if (caso.equals("Q41")) {
Q41 = Integer.parseInt(rs.getString(3));
} else if (caso.equals("Q42")) {
Q42 = Integer.parseInt(rs.getString(3));
}
}
//creo il documento mongo
DBObject doc = new BasicDBObject();
doc.put("type", "stats");
doc.put("nome_comune", comune);
//creo il sotto documento stats e lo popolo con le stats e la data
Stats st1 = new Stats(d, nulle, A401, A402, A406, ANNULLO, CN01, F401, F4BPER2, IGNOTO, Q41, Q42);
st1.generateId();
DBObject dbo;
ArrayList< DBObject > array = new ArrayList< DBObject >();
dbo = st1.bsonFromPojo(); array.add( dbo );
//aggiungo al documento il sotto documento daily_stats
doc.put( "daily_stats", array );
//scrivo sul DB le info
collection.insert(doc, WriteConcern.UNACKNOWLEDGED);
//collection.findOne(new Document("nome_comune", "name"));
}catch(MongoClientException e){
e.printStackTrace();
}catch(UnknownHostException uh){
uh.printStackTrace();
}catch(MongoException me){
me.printStackTrace();
}
}
}
package com.mspay;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.bson.types.ObjectId;
import java.time.LocalDate;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
public class Stats implements Serializable
{
private ObjectId _id;
private Date date_s;
private Integer NULL;
private Integer A401;
private Integer A402;
private Integer A406;
private Integer ANNULLO;
private Integer CN01;
private Integer F401;
private Integer F4BPER02;
private Integer IGNOTO;
private Integer Q41;
private Integer Q42;
public Stats() {}
public Stats( Date date, Integer NULL, Integer A401, Integer A402, Integer A406, Integer ANNULLO, Integer CN01, Integer F401, Integer F4BPER02, Integer IGNOTO, Integer Q41, Integer Q42)
{
this.date_s = date;
this.NULL = NULL;
this.A401 = A401;
this.A402 = A402;
this.A406 = A406;
this.ANNULLO = ANNULLO;
this.CN01 = CN01;
this.F401 = F401;
this.F4BPER02 = F4BPER02;
this.IGNOTO = IGNOTO;
this.Q41 = Q41;
this.Q42 = Q42;
}
public ObjectId getId() { return this._id; }
public void setId( ObjectId _id ) { this._id = _id; }
public void generateId() { if( this._id == null ) this._id = new ObjectId(); }
public Integer getNULL() { return this.NULL; }
public void setNULL( Integer NULL ) { this.NULL = NULL; }
public Integer getA401() { return this.A401; }
public void setA401( Integer A401 ) { this.A401 = A401; }
public Integer getA402() { return this.A402; }
public void setA402( Integer A402 ) { this.A402 = A402; }
public Integer getA406() { return this.A406; }
public void setA406( Integer A406 ) { this.A406 = A406; }
public Integer getANNULLO() { return this.ANNULLO; }
public void setANNULLO( Integer ANNULLO ) { this.ANNULLO = ANNULLO; }
public Integer getCN01() { return this.CN01; }
public void setCN01( Integer CN01 ) { this.CN01 = CN01; }
public Integer getF401() { return this.F401; }
public void setF401( Integer F401 ) { this.F401 = F401; }
public Integer getF4BPER02() { return this.F4BPER02; }
public void setF4BPER02( Integer F4BPER02 ) { this.F4BPER02 = F4BPER02; }
public Integer getIGNOTO() { return this.IGNOTO; }
public void setIGNOTO( Integer IGNOTO ) { this.IGNOTO = IGNOTO; }
public Integer getQ41() { return this.Q41; }
public void setQ41( Integer Q41 ) { this.Q41 = Q41; }
public Integer getQ42() { return this.Q42; }
public void setQ42( Integer Q42 ) { this.Q42 = Q42; }
public DBObject bsonFromPojo()
{
BasicDBObject document = new BasicDBObject();
document.put( "_id", this._id );
document.put( "date", this.date_s );
document.put( "NULL", this.NULL );
document.put( "A401", this.A401 );
document.put( "A402", this.A402 );
document.put( "A406", this.A406 );
document.put( "ANNULLO", this.ANNULLO );
document.put( "CN01", this.CN01 );
document.put( "F401", this.F401 );
document.put( "F4BPER02", this.F4BPER02 );
document.put( "IGNOTO", this.IGNOTO );
document.put( "Q41", this.Q41 );
document.put( "Q42", this.Q42 );
return document;
}
public void makePojoFromBson( DBObject bson )
{
BasicDBObject b = ( BasicDBObject ) bson;
this._id = ( ObjectId ) b.get( "_id" );
this.date_s = ( Date ) b.get( "date" );
this.NULL = ( Integer ) b.get( "NULL" );
this.A401 = ( Integer ) b.get( "A401" );
this.A402 = ( Integer ) b.get( "A402" );
this.A406 = ( Integer ) b.get( "A406" );
this.ANNULLO = ( Integer ) b.get( "ANNULLO" );
this.CN01 = ( Integer ) b.get( "CN01" );
this.F401 = ( Integer ) b.get( "F401" );
this.F4BPER02 = ( Integer ) b.get( "F4BPER02" );
this.IGNOTO = ( Integer ) b.get( "IGNOTO" );
this.Q41 = ( Integer ) b.get( "Q41" );
this.Q42 = ( Integer ) b.get( "Q42" );
}
}
最佳答案
假设您希望根据 nome_comune
属性更新条目,您可以执行如下操作:
var query = new BasicDBObject().append("nome_comune", comune);
if(collection.find(query).one() == null) {
// insert into collection like shown in question
} else {
var updateFields = new BasicDBObject().append("daily_stats", dbo);
var update = new BasicDBObject().append("$push", updateFields);
collection.update(query, update);
}
因此,如果文档尚不存在,请创建它。如果它确实存在,则通过附加其他元素来更新它。
替代解决方案
您还可以考虑使用 upsert
选项,这将避免插入和更新代码不同。
upsert
是函数update
的第三个参数,对应的Javadoc说:
when true, inserts a document if no document matches the update query criteria
它看起来像这样:
var query = new BasicDBObject().append("nome_comune", comune);
var updateFields = new BasicDBObject().append("daily_stats", dbo);
var update = new BasicDBObject().append("$push", updateFields);
collection.update(query, update, true, false);
关于java - 使用 Java 的字段中的 MongoDB concat 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71840799/
在有些场景下,我们需要对我们的varchar类型的字段做修改,而修改的结果为两个字段的拼接或者一个字段+字符串的拼接。 如下所示,我们希望将xx_role表中的name修改为name+id。
SELECT incMonth as Month, SUM( IF(item_type IN('typ1', 'typ2') AND incMonth = Month, 1, 0 ) )AS
我最近读到 volatile 字段是线程安全的,因为 When we use volatile keyword with a variable, all the threads read its va
我在一些模型中添加了一个 UUID 字段,然后使用 South 进行了迁移。我创建的任何新对象都正确填充了 UUID 字段。但是,我所有旧数据的 UUID 字段为空。 有没有办法为现有数据填充 UUI
刚刚将我的网站从 mysql_ 更新为 mysqli,并破坏了之前正常运行的查询。 我试图从旋转中提取 id,因为它每次都会增加 1,但我不断获取玩家 id,有人可以告诉我我做错了什么吗?我尝试了将
我在 Mac OS X 上使用带有 Sequel Pro 的 MySQL。我想将一个表中的一个字段(即名为“GAME_DY”的列)复制到另一个名为“DAY_ID”的表的空字段中。两个表都是同一数据库的
问题: 是否有可能有一个字段被 JPA 保留但被序列化跳过? 可以实现相反的效果(JPA 跳过字段而序列化则不会),如果使用此功能,那么相反的操作肯定会很有用。 类似这样的事情: @Entity cl
假设我有一个名为“dp”的表 Year | Month | Payment| Payer_ID | Payment_Recipient | 2008/2009 | July
我将尝试通过我的 Raspberry Pi 接入点保证一些 QoS。 开始之前,我先动手:我阅读了有关 tcp、udp 和 ip header 的内容。在IP header description我看
如果你能弄清楚如何重命名这个问题,我愿意接受建议。 在 Dart 语言中,可以编写一个带有 final 字段的类。这些是只能设置的字段构造函数前 body 跑。这可以在声明中(通常用于类中的静态常量)
你怎么样? 我有两个带有两个字段的日期选择器 我希望当用户选择 (From) 时,第二个字段 (TO) 将是 next day 。比如 booking.com 例如:当用户选择From 01-01-2
我想我已经看到了这个问题的一些答案,这些答案可能与我需要的相差不远,但我对 mysql 的了解还不够确定,所以我会根据我的具体情况提出问题。 我有一个包含多个表的数据库,为此,如果“image”表上的
我在 mySQL 数据库中有 2 个表: customers ============ customer_id (1, 2 ) customer_name (john, mark) orders ==
我正在开发一个员工目标 Web 应用程序。 领导/经理在与团队成员讨论后为他们设定目标。这是一年/半年/季度,具体取决于组织遵循的评估周期。 现在的问题是添加基于时间段的字段或存档上一季度/年度数据的
我正在寻找允许内容编辑器从媒体库中选择多个文件的东西,这些文件将在渲染中列出。他们还需要能够上传文件和搜索。它必须在页面编辑器(版本 8 中称为体验编辑器)中工作。 到目前为止我所考虑的: 一堆文件字
现在,我有以下由 original.df %.% group_by(Category) %.% tally() %.% arrange(desc(n)) 创建的 data.frame。 DF 5),
我想知道是否有一些步骤/解决方案可以处理错误消息并将它们放入 Pentaho 工具中的某个字符串或字段中?例如,如果连接到数据库时发生某些错误,则将该消息从登录到字符串/字段。 最佳答案 我们在作业的
如何制作像短信应用程序一样的“收件人”字段?例如,右侧有一个“+”按钮,当添加某人时,名称将突出显示并可单击,如圆角矩形等。有没有内置的框架? 最佳答案 不,但请参阅 Three20 的 TTMess
是否可以获取记录的元素或字段的列表 通过类型信息类似于类的已发布属性的列表吗? 谢谢 ! 最佳答案 取决于您的delphi版本,如果您使用的是delphi 2010或更高版本,则可以使用“新rtti”
我正在构建一个 SQLite 数据库来保存我的房地产经纪人的列表。我已经能够使用外键来识别每个代理的列表,但我想在每个代理的记录中创建一个列表;从代理商和列表之间的一对一关系转变为一对多关系。 看这里
我是一名优秀的程序员,十分优秀!