【问题标题】:Create mongodb query dynamically动态创建 mongodb 查询
【发布时间】:2015-10-13 07:01:08
【问题描述】:

我有一个集合,比如说,测试,其中包含大约 100 个字段,例如 _1、_2、_3 等

现在我想形成 MongoDB 查询,使得任何输入都像 1、2、5 或 5、6、7、8、9。

可以生成正确的查询。请就 MongoJack 提供帮助。

【问题讨论】:

  • 到目前为止你尝试了什么?
  • @il_raffa 我在集合中创建了另一个字段,其中包含所有索引(1 到 100,其中包含值)并尝试使用给定的输入,但它没有按我预期的那样工作。这就是发布问题的原因。

标签: mongodb collections mongojack database


【解决方案1】:

尝试先将输入与下划线字符连接,然后在查询中使用连接的字符串,例如:

StringBuilder sb = new StringBuilder();
sb.append("_");
sb.append(input);
String field = sb.toString();

List<Foo> bar = coll.find(DBQuery.is(field, "foo")).toArray();

【讨论】:

  • 我不确定它是否会起作用。我已经附加了输入字符串,但问题是动态添加要在其中查找的字段,,, (field, "foo")) 这真的正确吗?
  • 哦,您的意思是,如果输入以逗号分隔的字符串形式出现,并且您希望基于该字符串创建查询,对吧?
  • 是的,如果输入是 1, 5, 8 那么我的查询应该是这样的 DBQuery.and(DBQuery.is("_1", 1), DBQuery.is("_5" , 5), DBQuery.is("_8", 8)));我要求这是动态的
【解决方案2】:

我终于找到了解决办法。我们可以这样做:

Query q = DBQuery.empty();
for(int i=0; i < params.length ; i++ ) {    
    q = q.or(DBQuery.greaterThan("_"+(Integer.valueOf(params[i])+1), 0));
}

为我工作

【讨论】:

    猜你喜欢
    • 2015-04-09
    • 2015-01-24
    • 2014-10-15
    • 2016-06-16
    • 2017-04-20
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 2017-02-20
    相关资源
    最近更新 更多