如何将多个条件传递给 Criteria.elemMatch() Api?
How to pass more than one criteria to Criteria.elemMatch() Api?
我想在 org.springframework.data.mongodb.core.query.Criteria
Api.
提供的 elemMatch
方法调用中提供 3 个条件
Inventory
合集是这样的 -
{
"_id" : "H-P3NCDST45"
"booking" : [
{
"updateDate" : ISODate("2018-01-29T13:32:03.789Z"),
"status" : "STARTED",
"message" : "abc"
},
{
"updateDate" : ISODate("2018-01-29T13:32:04.789Z"),
"status" : "PENDING",
"message" : "def"
},
{
"updateDate" : ISODate("2018-01-29T13:33:04.789Z"),
"status" : "CONFIRMED",
"message" : "abc"
}
]
}
我想做类似下面查询的事情。从 inventory
集合中获取所有文档,这些文档在 booking
数组中至少有一个嵌入文档,其状态为 "STARTED" 和 updateDate
在 <start>
和 [=21 之间=] 日期,即从给定 <start>
和 <end>
日期之间 started/initiated 的库存中获取所有预订。
db.inventory.find({"booking": { $elemMatch: { status: "STARTED",updateDate: { $gte: ISODate("2018-01-01T14:04:34.447Z"), $lte: ISODate("2018-01-20T14:04:34.447Z")}}}})
条件 Api 提供 criteria.elemMatch(Criteria c)
。 如何在此 elemMatch(c)
方法调用中传递多个条件?
你可以试试
Criteria criteria =
Criteria.where("booking").
elemMatch(
Criteria.where("status").is("STARTED").
and("updateDate").gte(date1).lte(date2)
);
我想在 org.springframework.data.mongodb.core.query.Criteria
Api.
elemMatch
方法调用中提供 3 个条件
Inventory
合集是这样的 -
{
"_id" : "H-P3NCDST45"
"booking" : [
{
"updateDate" : ISODate("2018-01-29T13:32:03.789Z"),
"status" : "STARTED",
"message" : "abc"
},
{
"updateDate" : ISODate("2018-01-29T13:32:04.789Z"),
"status" : "PENDING",
"message" : "def"
},
{
"updateDate" : ISODate("2018-01-29T13:33:04.789Z"),
"status" : "CONFIRMED",
"message" : "abc"
}
]
}
我想做类似下面查询的事情。从 inventory
集合中获取所有文档,这些文档在 booking
数组中至少有一个嵌入文档,其状态为 "STARTED" 和 updateDate
在 <start>
和 [=21 之间=] 日期,即从给定 <start>
和 <end>
日期之间 started/initiated 的库存中获取所有预订。
db.inventory.find({"booking": { $elemMatch: { status: "STARTED",updateDate: { $gte: ISODate("2018-01-01T14:04:34.447Z"), $lte: ISODate("2018-01-20T14:04:34.447Z")}}}})
条件 Api 提供 criteria.elemMatch(Criteria c)
。 如何在此 elemMatch(c)
方法调用中传递多个条件?
你可以试试
Criteria criteria =
Criteria.where("booking").
elemMatch(
Criteria.where("status").is("STARTED").
and("updateDate").gte(date1).lte(date2)
);