MongoDB:使用Java驱动程序进行Pull操作

3

我正在学习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)

请告诉我我在这方面做错了什么。

谢谢...

1个回答

8
尝试这个:

Bson delete = Updates.pull("scores", new Document("SE", 96));


这个有效了,谢谢。我发现学习MongoDB查询语言很困难,但希望有一天能掌握它。 - RDM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接