Mongodb 在MONGO DB find查询中传递多个where条件
我正在收集mongo DB集合,即具有以下文档结构的学生 名称:详细信息:日期:值 因此,对于单个名称,我们将有一个详细列表 该详细信息列表将有多个日期列表 每个日期列表都有多个值Mongodb 在MONGO DB find查询中传递多个where条件,mongodb,find,Mongodb,Find,我正在收集mongo DB集合,即具有以下文档结构的学生 名称:详细信息:日期:值 因此,对于单个名称,我们将有一个详细列表 该详细信息列表将有多个日期列表 每个日期列表都有多个值 { "_id" : ObjectId("51472e9fd29a736d83c27ca3"), "name" : "Arun", "details" : [ { "date" : "20
{
"_id" : ObjectId("51472e9fd29a736d83c27ca3"),
"name" : "Arun",
"details" : [
{
"date" : "2015-01-17",
"isNew" : false,
"isOld" : true,
"values" : [
{
"money" : "330.0",
"new" : false,
"old" : true,
},
{
"money" : "340.0",
"new" : false,
"old" : true,
}
]
},
{
"date" : "2015-01-17",
"isNew" : false,
"isOld" : false,
"values" : [
{
"money" : "330.0",
"new" : false,
"old" : false,
},
{
"money" : "340.0",
"new" : false,
"old" : false,
}
]
},
{
"date" : "2015-01-17",
"isNew" : true,
"isOld" : false,
"values" : [
{
"money" : "330.0",
"new" : true,
"old" : false,
},
{
"money" : "340.0",
"new" : true,
"old" : false,
}
]
},
{
"date" : "2013-10-19",
"isNew" : true,
"isOld" : false,
"values" : [
{
"money" : "330.0",
"new" : true,
"old" : false,
},
{
"money" : "340.0",
"new" : true,
"old" : false,
}
]
}
]
}
What is need is, i want to SELECT "all the date lists" where "name" : "Arun" and "date" : "2015-01-17",I tried this way and it is not working as expected.I am getting all the dates instead 2015-01-17 in return.
I think only one where condition is working here and that is "name" : "Arun" , Query is not considering "details.date" : "2015-01-17" in where condition.
db.student.find({ "details.date" : "2015-01-17","name" : "Arun" },{"details.date":1}).pretty()
{
"_id" : ObjectId("51472e9fd29a736d83c27ca3"),
"details" : [
{
"date" : "2015-01-17"
},
{
"date" : "2015-01-17"
},
{
"date" : "2015-01-17"
},
{
"date" : "2013-10-19"
}
]
}
我目前正在使用mongo 1.6.5
有人能帮我解决这个问题吗?您的查询实际上与这两个字段都匹配。输出是MongoDB处理数组的副产品。匹配
"details.date" : "2015-01-17"
将返回集合中详细信息
字段中的任何条目具有正确日期的所有文档。它将不仅仅从details数组返回单个条目
为此,您可能需要查看用于投影的运算符,以限制数组中返回的条目。这是您的查询
db.sandy.aggregate(
{$unwind : "$details"},
{$match : {"details.date" : "2015-01-17","name" : "Arun"}}
)
我猜Mongo1.6.5不支持聚合。请参阅文档一次。首先,您需要升级到MongoDB的当前版本。1.6现在比当前的“主要”版本落后三个版本 其次,您需要修复您的模式。您说“对于单个名称,我们将有一个详细信息列表”-如果您继续将内容添加到此列表/数组中,它将继续无限增长,这是一个糟糕的模式设计。此外,更正确的做法是将要与文档一起获取的数组值分组—在本例中,您特别不希望与文档一起获取所有值,只希望获取特定日期的元素,另外,isOld/isNew字段向我建议,其中一些条目将对应过时的值,而其他条目将是最新的,将它们合并到同一个文档中是一个坏主意 因此,我建议将您的结构更改为针对每个学生的多个文档:
{
"name" : "Arun",
"date" : "2015-01-17",
"isNew" : false,
"isOld" : true,
"values" : [
{
"money" : "330.0",
"new" : false,
"old" : true,
},
{
"money" : "340.0",
"new" : false,
"old" : true,
}
]
},
{
"name" : "Arun",
"date" : "2015-01-17",
"isNew" : false,
"isOld" : true,
"values" : [
{
"money" : "330.0",
"new" : false,
"old" : false,
},
{
"money" : "340.0",
"new" : false,
"old" : false,
}
]
},
{
"name" : "Arun",
"date" : "2015-01-17",
"isNew" : false,
"isOld" : true,
"values" : [
{
"money" : "330.0",
"new" : true,
"old" : false,
},
{
"money" : "340.0",
"new" : true,
"old" : false,
}
]
},
{ "name" : "Arun",
"date" : "2013-10-19",
"isNew" : true,
"isOld" : false,
"values" : [
{
"money" : "330.0",
"new" : true,
"old" : false,
},
{
"money" : "340.0",
"new" : true,
"old" : false,
}
]
}
]
}
现在查询各种属性就更简单了,包括能够查询值和外部字段