列表中的查询文档 - spring data mongodb

时间:2014-06-20 04:26:17

标签: spring-data-mongodb

我有以下对象:

{ 
   "id" : "sampleId";
   foos : [{
         "prop1":"value1",
         "prop2":"value2"
      },
      {
         "prop1":"value3", 
         "prop2":"value4"
      }
]}

我如何获得foos,其中prop2value4?我正在使用Spring数据mongodb。

2 个答案:

答案 0 :(得分:0)

此代码将返回一个带有id sampleId的SampleBean,它只包含集合foos中的匹配项。

// Match one document with sampleId
Query q1 = new Query(where("id").is("sampleId"));

// match only foos with prop2 value value2 
Query q2 = query(where("foos").elemMatch(where("prop2").is("value2))

BasicQuery query = new BasicQuery(q1.getQueryObject(), q2.getQueryObject());
SampleBean result = mongoTemplate.findOne(query, SampleBean.class)

答案 1 :(得分:0)

如果您使用spring数据mongodb存储库,它可以让您的生活更轻松。您将需要一个域类。例如

def calc_pi(acc):
     pos = False
     sum = 4.0
     for i in range(2, acc):
          if not pos:
               sum -= 4.0/(2*i-1)
               pos = True
          else:
               sum += 4.0/(2*i-1)
               pos = False
     return float(sum)

print(calc_pi(5000))

然后只需从代码中调用此方法

public class Foo {
    String prop1;
    String prop2;
}

public class MyClass {
    String id;
    List<Foo> foos;
}

public interface MyClassRepository extends MongoRepository<MyClass, String> {
    List<MyClass> findByFoosProp2(String prop2ValueToLookFor);
    // assuming you can find multiple matches
}