首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mongodb查询中的ServletException

mongodb查询中的ServletException
EN

Stack Overflow用户
提问于 2016-07-10 23:48:59
回答 1查看 50关注 0票数 0
代码语言:javascript
复制
{
   id:1,  list:{
     time:9:00AM,
     branch:[cse,it],
     count:30,
   },  id:2,  list:{
     time:9:30AM,
     branch:[cse,it],
     count:20,
   }
}

下面的代码是根据json文档中的id和时间添加新的分支。

代码语言:javascript
复制
public DBObject appendRoute(String id, String time, String groups,
    int count)  {
        DBCollection coll = db.getCollection("groups");
        BasicDBObject queryDocument = new BasicDBObject("id", id)
            .append("list.time", time).append("list.count", count);
        List<DBObject> sourceDocument = coll.find(queryDocument).toArray();
        BasicDBObject elementToArray = new BasicDBObject("list.branch",
            branch);
        BasicDBObject pushElement = new BasicDBObject("$push", elementToArray);
        coll.update(queryDocument, pushElement);

        System.out.println(sourceDocument);
        return sourceDocument.get(0);
    }

下面的代码抛出以下错误:

代码语言:javascript
复制
javax.servlet.ServletException: com.mongodb.WriteConcernException: {
"serverUsed" : "localhost/127.0.0.1:27017" , "connectionId" : 1 ,
"err" : "cannot use the part (list of list.count) to traverse the
element ({list: [ { time: \"9:00AM\", branches: [ ece ], count: \"20\"
}, { time: \"9:05AM\", branch: [ cse ], count: \"20\" },  "code" :
16837 , "n" : 0 , "ok" : 1.0}
org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:392)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:382)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:345)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:220)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

请让我知道我的代码中有什么问题?

EN

回答 1

Stack Overflow用户

发布于 2016-07-11 04:56:52

您的Mongo查询似乎是正确的。如果您使用的是最新版本的Java驱动程序,请使用以下代码。它应该可以解决您的问题。

我没有你的Java驱动版本。所以我不能重复这个问题。

Mongo查询:-

代码语言:javascript
复制
db.groups.updateOne({"_id" : ObjectId("5782abde4e0f937abf0fcbd3"), 
    "list.time" : "9:00AM" , "list.count" : 30}, {"$push" : {"list.branch" : "ece"}});

我已经使用最新的Java驱动程序编写了您的解决方案。它工作得很好。

代码语言:javascript
复制
<dependency>        <groupId>org.mongodb</groupId>      <artifactId>mongo-java-driver</artifactId>      <version>3.2.2</version>    </dependency>

代码:-

下面的代码已经过测试,运行正常。

代码语言:javascript
复制
import org.bson.Document; import org.bson.types.ObjectId;

import com.mongodb.MongoClient; import com.mongodb.client.MongoDatabase; import com.mongodb.client.model.Filters; import com.mongodb.client.model.Updates; import com.mongodb.client.result.UpdateResult;

public class MongoGroupsExample {

    public static void main(String[] args) {        MongoClient client = new MongoClient();         MongoDatabase database = client.getDatabase("test");

        int count = 30;

        Document findDoc = database.getCollection("groups")
                .find(Filters.and(Filters.eq("_id", new ObjectId("5782abde4e0f937abf0fcbd3")),
                        Filters.eq("list.time", "9:00AM"), Filters.eq("list.count", count)))
                .first();

        System.out.println(findDoc.toJson());

        UpdateResult updateResults = database.getCollection("groups").updateOne(
                Filters.and(Filters.eq("_id", new ObjectId("5782abde4e0f937abf0fcbd3")),
                        Filters.eq("list.time", "9:00AM"), Filters.eq("list.count", count)),
                Updates.push("list.branch", "ece"));

        System.out.println(updateResults.getModifiedCount());

    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38293676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档