免责声明:我是Mongo和一般数据库的菜鸟,所以如果我关注术语或概念,请告诉我。
出于本示例的目的,我想将鼠标坐标存储在嵌套在文档中的对象中。该文件看起来像:
{ "_id" : ObjectId("4f39805d35919a2a7c7aba3e"), "mouseLoc" : { "x" : 10, "y" : 20 } }
似乎atomic updating, via modifier operations,是可行的方式,因为我只在这里存储值(在其他软件中将其检索到其他地方)。但是,我无法弄清楚查询部分。如何访问此文档以设置x和y值?
我正在使用Java,所以我正在尝试:
BasicDBObject mouseLoc = new BasicDBObject();
mouseLoc.put("x", mouseX);
mouseLoc.put("y", mouseY);
myCollection.update(queryObj, new BasicDBObject("$set", mouseLoc), true, false);
但是,我不知道如何指定queryObj以使用mouseLoc键获取文档。或者,如果有更智能的方式来存储这样的信息,请上学。
如果这更简单,我可以跟随Mongo shell / JS提示。
的更新:
如果我给它一个像'name'这样的静态字段,我可以查询这个文档。因此,要更新此文档:
{ "_id" : ObjectId("4f39805d35919a2a7c7aba3e"), "name" : "mouseLoc", "mouseLoc" : { "x" : 10, "y" : 20 } }
我可以使用此代码:
BasicDBObject mouseLoc = new BasicDBObject();
mouseLoc.put("x", mouseX);
mouseLoc.put("y", mouseY);
BasicDBObject queryObj = new BasicDBObject("name", "mouseLoc");
BasicDBObject updateObj = new BasicDBObject("$set", new BasicDBObject("mouseLoc", mouseLoc));
myCollection.update(queryObj, updateObj, true, false);
但是,为了能够使用“mouseLoc”键检索文档,必须指定“name”字段似乎是多余的。也许我只是误解了数据库/ mongo设计?
答案 0 :(得分:0)
您可以在查询部分指定查找文档的方法,例如:_id
或其他唯一字段。
在您的示例中,它将如下所示:
ObjectId objectId = new ObjectId("4f39805d35919a2a7c7aba3e");
BasicDBObject queryObj = new BasicDBObject("_id", objectId);
(可能缺少ObjectId
,因为我不懂Java。)
<强>更新强>
如果您要搜索特定的mouseLoc
,queryObj
将是mouseLoc
对象。 (在JSON中它将是{ 'x': mouseX, 'y': mouseY }
。)
答案 1 :(得分:0)
使用.
说明符怎么样?
myCollection.updateOne(Document.parse("{ \"_id\" : ObjectId(\"4f39805d35919a2a7c7aba3e\")}"),
Document.parse("{$set:{ \"mouseLoc.x\" : "+mouseX+", \"mouseLoc.y\" : "+mouseY+" }")
)