如何使用java驱动程序更新mongo db中的文档字段?
2022-09-02 20:30:46
引用:
对mongo db来说仍然很陌生,但我正在尝试更新集合中现有文档的一部分...不幸的是,上面的链接没有更新示例。
从本质上讲,我只想能够:
- 向文档添加新域
- 将文档的现有域更新为新值
这是我的代码(Grails + Groovy + Java + MongoDB + java驱动程序):
def shape = mongo.shapes.findOne(new BasicDBObject("data", "http://www.foo.com")); // get the document
mongo.shapes.update(new BasicDBObject("_id", shape._id), new BasicDBObject("isProcessed", 0)); // add a new "isProcessed" field set to 0
mongo.shapes.update(new BasicDBObject("_id", shape._id), new BasicDBObject("data", "http://www.bar.com"));
这几乎掩盖了整个物体...我可能会尝试修改原始形状对象,然后对其运行更新。但在此之前,是否有人有仅更新单个字段(而不是整个文档)的经验?
编辑:
我刚刚尝试了一下,并且能够通过使用新的和/或更新的字段发送整个对象来成功更新,并且有效。我想知道驱动程序是否足够智能,只能更新最小的更改子集,或者它只是盲目地更新整个事情?(在下面的例子中,它只是更新了电线上的foo字段还是整个形状文档?
法典:
def shape = mongo.shapes.findOne(); // get the first shape to use as a base
shape.removeField("_id"); // remove the id field
shape.put("foo","bar"); // add a new field "foo"
mongo.shapes.insert(shape); // insert the new shape
def shape2 = mongo.shapes.findOne(new BasicDBObject("foo", "bar")); // get the newly inserted shape (and more importantly, it's id)
shape2.put("foo", "bat"); // update the "foo" field to a new value
mongo.shapes.update(new BasicDBObject("_id", shape2._id), shape2); // update the existing document in mongo