MongoDB:使用 Java 驱动程序拉取
MongoDB: Pull using Java Driver
我在学习MongoDB。我坚持使用 MongoDB Java 驱动程序执行非常基本的操作。我正在尝试从文档中存在的数组中删除一个元素。文档如下所示:
db.test.find().pretty()
{
"_id" : ObjectId("581245dd51030d389f5cf701"),
"name" : "Rahul",
"scores" : [
{
"SDM" : 97
},
{
"SE" : 96
},
{
"DM" : 80
}
]
}
我正在尝试删除数组中的第二个元素,即 {"SE" : 96}
。我知道我可以使用 coll.update(match, new BasicDBObject("$pull", update));
来实现这一点。但是我想利用 com.mongodb.client.model.Updates.pull(final String fieldName, final TItem value)
方法。
这是我在发布问题之前尝试过的:
1) 我原以为我尝试这样做时不会发生任何事情,而且确实没有对文档进行任何修改。
` Bson filter = Filters.eq("name", "Rahul");
Bson delete = Updates.pull("SE", 96);
collection.updateOne(filter, delete);`
2) 下面是抛出异常
` Bson filter = Filters.eq("name", "Rahul");
Bson delete = Updates.pull("scores.SE", 96);
collection.updateOne(filter, delete);`
异常:
Exception in thread "main" com.mongodb.MongoWriteException: cannot use the part (scores of scores.SE) to traverse the element ({scores: [ { SDM: 97.0 }, { SE: 96.0 }, { DM: 80.0 } ]})
at com.mongodb.MongoCollectionImpl.executeSingleWriteRequest(MongoCollectionImpl.java:523)
at com.mongodb.MongoCollectionImpl.update(MongoCollectionImpl.java:508)
at com.mongodb.MongoCollectionImpl.updateOne(MongoCollectionImpl.java:355)
at com.mongodb.MongoCollectionImpl.updateOne(MongoCollectionImpl.java:350)
at com.mongodb.mongoProject.crud.UpdateTest.main(HW_3_1.java:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
请告诉我我哪里出错了。
谢谢...
试试这个:
Bson delete = Updates.pull("scores", new Document("SE", 96));
我在学习MongoDB。我坚持使用 MongoDB Java 驱动程序执行非常基本的操作。我正在尝试从文档中存在的数组中删除一个元素。文档如下所示:
db.test.find().pretty()
{
"_id" : ObjectId("581245dd51030d389f5cf701"),
"name" : "Rahul",
"scores" : [
{
"SDM" : 97
},
{
"SE" : 96
},
{
"DM" : 80
}
]
}
我正在尝试删除数组中的第二个元素,即 {"SE" : 96}
。我知道我可以使用 coll.update(match, new BasicDBObject("$pull", update));
来实现这一点。但是我想利用 com.mongodb.client.model.Updates.pull(final String fieldName, final TItem value)
方法。
这是我在发布问题之前尝试过的:
1) 我原以为我尝试这样做时不会发生任何事情,而且确实没有对文档进行任何修改。
` Bson filter = Filters.eq("name", "Rahul");
Bson delete = Updates.pull("SE", 96);
collection.updateOne(filter, delete);`
2) 下面是抛出异常
` Bson filter = Filters.eq("name", "Rahul");
Bson delete = Updates.pull("scores.SE", 96);
collection.updateOne(filter, delete);`
异常:
Exception in thread "main" com.mongodb.MongoWriteException: cannot use the part (scores of scores.SE) to traverse the element ({scores: [ { SDM: 97.0 }, { SE: 96.0 }, { DM: 80.0 } ]})
at com.mongodb.MongoCollectionImpl.executeSingleWriteRequest(MongoCollectionImpl.java:523)
at com.mongodb.MongoCollectionImpl.update(MongoCollectionImpl.java:508)
at com.mongodb.MongoCollectionImpl.updateOne(MongoCollectionImpl.java:355)
at com.mongodb.MongoCollectionImpl.updateOne(MongoCollectionImpl.java:350)
at com.mongodb.mongoProject.crud.UpdateTest.main(HW_3_1.java:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
请告诉我我哪里出错了。
谢谢...
试试这个:
Bson delete = Updates.pull("scores", new Document("SE", 96));