arrays - MongoDB:使用 Java 驱动程序拉取

标签 arrays mongodb mongodb-query mongodb-java

我在这里学习 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):

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));

关于arrays - MongoDB:使用 Java 驱动程序拉取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40292201/

相关文章:

java - 如何获得数组中五个最少重复的元素

node.js - 如何在 MongoDB find() 中显示建议

python - 检查记录是否存在于 MongoDB 中

node.js - 根据 mongodb 类型不推荐使用 find 方法

java - 使用数组实现 Map

c++ - 将数组元素递增 1

javascript - 连接不会关闭 mongodb

java - 如何使用 Java 驱动程序为 MongoDB 构建 $or 查询?

Spring data MongoDB 将数组添加到现有文档

Java - "invalid stream header"ArrayList 的序列化