Java Mongo db不会更新现有文档
我正在使用JavaPOJO和SpringMongoTemplate,现在我花了几个小时试图理解为什么MongoDb不会更新现有文档 我可以插入文档,但不能更新现有文档 在mongo/spring中有没有简单的方法来跟踪这一点? 到目前为止,我试过: 只需调用save:Java Mongo db不会更新现有文档,java,mongodb,spring-data,Java,Mongodb,Spring Data,我正在使用JavaPOJO和SpringMongoTemplate,现在我花了几个小时试图理解为什么MongoDb不会更新现有文档 我可以插入文档,但不能更新现有文档 在mongo/spring中有没有简单的方法来跟踪这一点? 到目前为止,我试过: 只需调用save: person.setUpdateDate(new Date()); mongoTemplate.save(person); //not working DBColl
person.setUpdateDate(new Date());
mongoTemplate.save(person);
//not working
DBCollection coll=mongoTemplate.getCollection("Person");
DBObject mongoPerson = morphia.toDBObject(person);
DBObject afterSave = coll.findAndModify(new BasicDBObject("id", person.getId()), mongoPerson);
//afterSave is null
DBObject afterSave = coll.findAndModify(new BasicDBObject("id", person.getId()), mongoPerson);
//afterSave is null
mongoTemplate.save(person);
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(person.getId()));
mongoTemplate.updateFirst(query, new Update().set("name",person.getName())
.set("desc", person.getDesc())
.set("updateDate",new Date())
,
Person.class)
调用updateFirst
mongoTemplate.updateFirst(new Query(Criteria.where("_id").is(person.getId())),
Update.update("objName", "NotWorking"),Person.class);
DBCollection coll=mongoTemplate.getCollection("Person");
DBObject mongoPerson = morphia.toDBObject(person);
DBObject afterSave = coll.findAndModify(new BasicDBObject("id", person.getId()), mongoPerson);
//afterSave is null
DBObject afterSave = coll.findAndModify(new BasicDBObject("id", person.getId()), mongoPerson);
//afterSave is null
mongoTemplate.save(person);
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(person.getId()));
mongoTemplate.updateFirst(query, new Update().set("name",person.getName())
.set("desc", person.getDesc())
.set("updateDate",new Date())
,
Person.class)
首先获取集合,转换为DB对象,
然后查找并修改:
DBCollection coll=mongoTemplate.getCollection("Person");
DBObject mongoPerson = morphia.toDBObject(person);
DBObject afterSave = coll.findAndModify(new BasicDBObject("id", person.getId()), mongoPerson);
//afterSave is null
DBObject afterSave = coll.findAndModify(new BasicDBObject("id", person.getId()), mongoPerson);
//afterSave is null
mongoTemplate.save(person);
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(person.getId()));
mongoTemplate.updateFirst(query, new Update().set("name",person.getName())
.set("desc", person.getDesc())
.set("updateDate",new Date())
,
Person.class)
尝试按_id查找,然后保存:
DBCollection coll=mongoTemplate.getCollection("Person");
DBObject mongoPerson = morphia.toDBObject(person);
DBObject afterSave = coll.findAndModify(new BasicDBObject("id", person.getId()), mongoPerson);
//afterSave is null
DBObject mongoPerson = morphia.toDBObject(person);
Person found1 = mongoTemplate.findById(person.getId(), Person.class);
found1.setObjName(person.getName());
mongoTemplate.save(found1);
DBObject afterSave = coll.findAndModify(new BasicDBObject("id", person.getId()), mongoPerson);
//afterSave is null
mongoTemplate.save(person);
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(person.getId()));
mongoTemplate.updateFirst(query, new Update().set("name",person.getName())
.set("desc", person.getDesc())
.set("updateDate",new Date())
,
Person.class)
首先查找,然后使用_id保存:
DBCollection coll=mongoTemplate.getCollection("Person");
DBObject mongoPerson = morphia.toDBObject(person);
DBObject afterSave = coll.findAndModify(new BasicDBObject("id", person.getId()), mongoPerson);
//afterSave is null
DBCursor found = coll.find(new BasicDBObject("_id", person.getId()));
DBObject first = found.next();
mongoTemplate.save(first);
DBObject afterSave = coll.findAndModify(new BasicDBObject("id", person.getId()), mongoPerson);
//afterSave is null
mongoTemplate.save(person);
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(person.getId()));
mongoTemplate.updateFirst(query, new Update().set("name",person.getName())
.set("desc", person.getDesc())
.set("updateDate",new Date())
,
Person.class)
先查找,然后使用id保存:
DBCollection coll=mongoTemplate.getCollection("Person");
DBObject mongoPerson = morphia.toDBObject(person);
DBObject afterSave = coll.findAndModify(new BasicDBObject("id", person.getId()), mongoPerson);
//afterSave is null
DBCursor found = coll.find(new BasicDBObject("id", person.getId()));
DBObject first = found.next();
mongoTemplate.save(first);
DBObject afterSave = coll.findAndModify(new BasicDBObject("id", person.getId()), mongoPerson);
//afterSave is null
mongoTemplate.save(person);
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(person.getId()));
mongoTemplate.updateFirst(query, new Update().set("name",person.getName())
.set("desc", person.getDesc())
.set("updateDate",new Date())
,
Person.class)
尝试查找并修改,然后保存:
DBCollection coll=mongoTemplate.getCollection("Person");
DBObject mongoPerson = morphia.toDBObject(person);
DBObject afterSave = coll.findAndModify(new BasicDBObject("id", person.getId()), mongoPerson);
//afterSave is null
DBObject afterSave = coll.findAndModify(new BasicDBObject("id", person.getId()), mongoPerson);
//afterSave is null
mongoTemplate.save(person);
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(person.getId()));
mongoTemplate.updateFirst(query, new Update().set("name",person.getName())
.set("desc", person.getDesc())
.set("updateDate",new Date())
,
Person.class)
使用查询更新单个字段:
DBCollection coll=mongoTemplate.getCollection("Person");
DBObject mongoPerson = morphia.toDBObject(person);
DBObject afterSave = coll.findAndModify(new BasicDBObject("id", person.getId()), mongoPerson);
//afterSave is null
DBObject afterSave = coll.findAndModify(new BasicDBObject("id", person.getId()), mongoPerson);
//afterSave is null
mongoTemplate.save(person);
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(person.getId()));
mongoTemplate.updateFirst(query, new Update().set("name",person.getName())
.set("desc", person.getDesc())
.set("updateDate",new Date())
,
Person.class)
*更新
这也在起作用:
DBCollection coll=mongoTemplate.getCollection("Person");
DBObject mongoPerson = morphia.toDBObject(person);
DBObject afterSave = coll.findAndModify(new BasicDBObject("id", person.getId()), mongoPerson);
//afterSave is null
DBObject afterSave = coll.findAndModify(new BasicDBObject("id", person.getId()), mongoPerson);
//afterSave is null
mongoTemplate.save(person);
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(person.getId()));
mongoTemplate.updateFirst(query, new Update().set("name",person.getName())
.set("desc", person.getDesc())
.set("updateDate",new Date())
,
Person.class)
mongoOperations.save(person,"Person");
我能够使更新工作-不是我想要的方式,但…它的工作
DBCollection coll=mongoTemplate.getCollection("Person");
DBObject mongoPerson = morphia.toDBObject(person);
DBObject afterSave = coll.findAndModify(new BasicDBObject("id", person.getId()), mongoPerson);
//afterSave is null
DBObject afterSave = coll.findAndModify(new BasicDBObject("id", person.getId()), mongoPerson);
//afterSave is null
mongoTemplate.save(person);
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(person.getId()));
mongoTemplate.updateFirst(query, new Update().set("name",person.getName())
.set("desc", person.getDesc())
.set("updateDate",new Date())
,
Person.class)
import static org.springframework.data.mongodb.core.query.Criteria.where;
import static org.springframework.data.mongodb.core.query.Query.query;
import static org.springframework.data.mongodb.core.query.Update.update;
@Controller
public class PersonController {
@Autowired
private MongoTemplate mongoTemplate;
@Autowired
MongoOperations mongoOperations;
...
mongoOperations.updateFirst(query(where("_id").is(person.getId())), Update.update("name", newPersonName),"Person");
现在还不确定为什么这会在
DBCollection coll=mongoTemplate.getCollection("Person");
DBObject mongoPerson = morphia.toDBObject(person);
DBObject afterSave = coll.findAndModify(new BasicDBObject("id", person.getId()), mongoPerson);
//afterSave is null
DBObject afterSave = coll.findAndModify(new BasicDBObject("id", person.getId()), mongoPerson);
//afterSave is null
mongoTemplate.save(person);
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(person.getId()));
mongoTemplate.updateFirst(query, new Update().set("name",person.getName())
.set("desc", person.getDesc())
.set("updateDate",new Date())
,
Person.class)
mongoOperations.save(person);
无法工作…您需要在方法中添加db名称
DBCollection coll=mongoTemplate.getCollection("Person");
DBObject mongoPerson = morphia.toDBObject(person);
DBObject afterSave = coll.findAndModify(new BasicDBObject("id", person.getId()), mongoPerson);
//afterSave is null
DBObject afterSave = coll.findAndModify(new BasicDBObject("id", person.getId()), mongoPerson);
//afterSave is null
mongoTemplate.save(person);
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(person.getId()));
mongoTemplate.updateFirst(query, new Update().set("name",person.getName())
.set("desc", person.getDesc())
.set("updateDate",new Date())
,
Person.class)
例如:
DBCollection coll=mongoTemplate.getCollection("Person");
DBObject mongoPerson = morphia.toDBObject(person);
DBObject afterSave = coll.findAndModify(new BasicDBObject("id", person.getId()), mongoPerson);
//afterSave is null
DBObject afterSave = coll.findAndModify(new BasicDBObject("id", person.getId()), mongoPerson);
//afterSave is null
mongoTemplate.save(person);
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(person.getId()));
mongoTemplate.updateFirst(query, new Update().set("name",person.getName())
.set("desc", person.getDesc())
.set("updateDate",new Date())
,
Person.class)
如果您不这样做,mongo会将您的数据保存在数据库中,名称为userInfo,大写字母为“I”
.您如何确定更新不起作用?他们正在进入服务器吗?它们看起来像什么?如果在mongod上将logging设置为1或verbose,则它将打印日志中尝试的每个操作,成功或失败。我不确定探查器与此有何关系,但getlasterror不是写入,而是写入后发送的命令。在日志中找到更新。您不必重新启动mongod-只需运行db.adminCommand{setParameter:1,logLevel:1},当您想将其与logLevel:0设置为相同时,您使用的是什么版本?在该数据库db.person中运行常规查询。查找{u id:ObjectId'53b98c56ee7957044fc40667'}-似乎找不到匹配的文档。您在这里使用的是上述哪种方法?啊,不带第二个参数的save将尝试保存到要保存的对象的实体类型的集合。配置中的实体类型不是Person。实际上,您没有在任何地方显示person变量的声明-它的类型/类是什么?我仍然很好奇mongoOperations.saveperson为什么不起作用-我认为如果person的类型是person,那么它应该是等效的…如果您只传递person对象,哪里有犯错的地方?我在想可能是配置,或者可能是person不是类person-你展示了你的类定义,person的声明是什么样子的?也许把你所有的代码都放在一个要点中,并用一个指针指向它——要自信地调试代码片段真的很难。
DBCollection coll=mongoTemplate.getCollection("Person");
DBObject mongoPerson = morphia.toDBObject(person);
DBObject afterSave = coll.findAndModify(new BasicDBObject("id", person.getId()), mongoPerson);
//afterSave is null
DBObject afterSave = coll.findAndModify(new BasicDBObject("id", person.getId()), mongoPerson);
//afterSave is null
mongoTemplate.save(person);
Query query = new Query();
query.addCriteria(Criteria.where("_id").is(person.getId()));
mongoTemplate.updateFirst(query, new Update().set("name",person.getName())
.set("desc", person.getDesc())
.set("updateDate",new Date())
,
Person.class)