1

我有以下在 mongo shell 中执行的 mongo 查询。

db.test.update({ 
uuid: "160597270101684", 
sessionId: "160597270101684.1" 
}, { 
$setOnInsert: {
  stamps: {
    currentVisit: "1377500985", 
    lastVisit: "1377500985"
  }
},
$push:{
  visits: {
    page: "google.com",
    method: "GET"
  }
}
}, { upsert:true })

因为我是 Java 新手,所以我对创建 basicDBObject 有点困惑。

我曾尝试过这样的示例

BasicDBObject doc = new BasicDBObject("uuid",1).append("session",2);
BasicDBObject upsertion = new BasicDBObject("upsert",true);
collection.update(doc,upsertion);

但它不起作用。

任何帮助都会很棒。

4

1 回答 1

3

upsert选项不是用 a 指定的,DBObject而是用第三个参数指定的DBCollection.update

public WriteResult update(DBObject q, DBObject o, boolean upsert, boolean multi)

您需要通过附加$setOnInsert$push和来形成用于更新stamps的DBObject visits

BasicDBObject update = new BasicDBObject();
BasicDBObject stamps = new BasicDBObject();
stamps.append("currentVisit", "1377500985").append("lastVisit", "1377500985");
BasicDBObject visits = new BasicDBObject();
update.append("$setOnInsert", stamps).append("$push", visits);

collection.update(doc, update, true);
于 2013-09-10T06:29:57.500 回答