我的文档有这样的结构:
{
"Calibration": {
"Presettings": {
"Date": [
{
"Value": "2016-09-02 10:11",
"Type": "generated"
},
{
"Value": "2016-09-05",
"Type": "schedule",
"Duration": "5"
}
]
}
}
}
如何定义查询对象的选择器部分以获取日期(值)小于或等于给定日期且Type=='generated'
的所有文档?
答案 0 :(得分:10)
首先,您需要创建索引。我建议你在Calibration.Presettings.Date field
上创建一个索引。
您可以使用以下JSON对象来创建它:
{
"index": {
"fields": [
"_id",
"Calibration.Presettings.Date.[].Type"
]
},
"type": "json"
}
所以选择器会是这样的:
{
"selector": {
"Calibration.Presettings.Date": {
"$elemMatch": {
"$and": [
{
"Type": "generated"
},
{
"Value": {
"$gte": "2016-09-01"
}
}
]
}
}
}
}
我们在 Calibration.Pressettings.Date 字段上执行查询,该字段是数组。由于它是一个数组,我们必须使用 $ elemMatch 运算符。
然后,我们对Value和Type有一个 $和条件。
日期的类型必须生成。可以使用 $ eq 运算符,也可以只使用这种简单的语法:{"field":"value"}
。
最后,Date`s Value必须大于或等于X date。我们可以使用 $ gte 运算符。