복붙노트

[MONGODB] MongoDB의 : 배열 매칭 매개 변수에서 하위 문서 찾기

MONGODB

MongoDB의 : 배열 매칭 매개 변수에서 하위 문서 찾기

MongoDB를 나는 특정 매개 변수를 충족 하위 문서의 값을 기준으로 문서를 찾을 싶습니다. 특히 나는이 같은 구조 문서를 가지고 :

{
  name: "test",
  data: [{
    name: "test1",
    start: 0,
    end: 2
  },
  {
    name: "test2",
    start: 15
    end: 18
  }]
}

어떻게 데이터 하위 문서의 시작 시간이 적은 5 이상과 같은 하위 문서의 종료 시간이 5보다 큰 경우에만 내 문서를 반환하는 MongoDB를 알 수 있습니까? 현재, 내가 할 경우

db.foo.findOne({
  'data.start': { $lte: 5 },
  'data.end': { $gte: 5 }
})

5 내가 5 (또는 무엇이든 값)이 0보다 크고 미만 또는 이상 15 미만 18 인 경우에만 내 문서를 반환하는 MongoDB를 말할 수있는 방법 0보다 큰 미만 (18)을 항상 있기 때문에 내 문서를 반환합니다 ?

해결법

  1. ==============================

    1.당신은 $ elemMatch를 사용하고 싶습니다.

    당신은 $ elemMatch를 사용하고 싶습니다.

    db.foo.findOne({ data: { $elemMatch : {
      start: { $lte: 5 },
      end: { $gte: 5 }
      }}
    })
    
  2. ==============================

    2.이 없었다 코드 부정 행위의이 게시물의 생각을 가로 질러왔다;을 따라서는 사용하여 Java에서 코드를 공유하는 생각) 스프링 데이터를-MongoDB를

    이 없었다 코드 부정 행위의이 게시물의 생각을 가로 질러왔다;을 따라서는 사용하여 Java에서 코드를 공유하는 생각) 스프링 데이터를-MongoDB를

    Mongo mongo = new Mongo("localhost", 27017);
    MongoTemplate mongoTemplate = new MongoTemplate(mongo, "db");
    Query query = new Query();
    query.addCriteria(Criteria.where("data").elemMatch(
             Criteria.where("start").lte(5)
            .andOperator(Criteria.where("end").gte(5))));
    Foo foo = mongoTemplate.findOne(query, Foo.class);
    
  3. from https://stackoverflow.com/questions/11823296/mongodb-find-subdocument-in-array-matching-parameters by cc-by-sa and MIT license