Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Mongo db不会更新现有文档_Java_Mongodb_Spring Data - Fatal编程技术网

Java Mongo db不会更新现有文档

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

我正在使用JavaPOJO和SpringMongoTemplate,现在我花了几个小时试图理解为什么MongoDb不会更新现有文档 我可以插入文档,但不能更新现有文档 在mongo/spring中有没有简单的方法来跟踪这一点? 到目前为止,我试过: 只需调用save:

        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)