首先,我很抱歉如果我的英语不太好,我希望我写的东西可以理解。MongoDB - 以标量值数组检索结果
我有这个模式的文档:
{
"fields":[
{"field": field1, "value": 1},
{"field": field2, "value": 2},
{"field": field3, "value": 3}
],
"time": datetimeObj
},
{
"fields":[
{"field": field1, "value": 4},
{"field": field4, "value": 5}
],
"time": datetimeObj
}
我试图做的是产生一个返回特定字段的值列表查询。
例如,如果我想的字段值“字段1”我希望是这样的:
[1, 4]
字段“字段2”:
[2, 0] // 0 because it doesn't exist in the second document
现在我想要获得此导致使用聚合操作是这样的:
db.collection.aggregate([
{
$project: {
value: {
$filter: {
input: "$fields",
as: "fields",
cond: { $eq: [ "$$fields.filed", "filed1" ] }
}
},
_id : 0
}
}
但我得到很多详细的比我想:
{
"value" : [
{
"value" : NumberInt(1),
"filed" : "field1"
}
]
}
{
"value" : [
{
"value" : NumberInt(4),
"word" : "field1"
}
]
}
有没有一种方法可以像数组值一样得到结果?另外,是否可以按时间字段对这些值进行排序?
我正在使用python库,所以这将是非常有用的有解决方案的python示例。谢谢
我喜欢这个解决方案,但有一个问题需要解决。我需要得到某个字段的最后'n'值,在这个例子中'field1',这就是为什么我需要按time desc(只调整“time”:-1)排序。问题是'field1'不能存在于我正在分析的'n'文档之一中,比如我的问题中的'field2',我需要知道这一点。也许我会写更好的问题。是否可以调整此解决方案以检索例如如果该值不存在,最后12个值(按时间desc排序,限制12)为0? –
我已经调整了实现来创建一个字段1和值为0的文档,当它不存在于'fields'数组中时,并且在结尾添加切片以选择12。请确认。 – Veeram
它很棒!但我怀疑。是否仅在管道的末端执行切片? 如果我有1000个文档的集合,我宁愿排序 - >切片 - >在我的1000个文档的子集上执行其他操作(本例中为12个)。 –