MongoDB:在数组匹配参数中查找子文档

在MongoDB中,我想根据满足某些参数的子文档的值find文档。 具体来说,我有一个这样的文件结构:

{ 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大于0小于18.如何告诉MongoDB只返回我的文档,如果5(或任何值)大于0小于2或大于15小于18 ?

你想用$ elemMatch 。

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

碰到这个post,考虑到了不在那里的代码作弊;)所以想到在Java使用spring-data-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);