鉴于以下文件结构:
{
_id: ObjectId("..."),
lists: [
{
name: 'List 1'
meta: {
expiresOn: 1621560318226
}
},
{
name: 'List 2'
meta: {
expiresOn: 1418971859555
}
}
]
}
我试图获得属性expiresOn
大于某个时间戳的所有列表的聚合,但这似乎比我想象的要难。所以预期的结果是:
[
{ name: 'List 1' }
{ name: 'List from another document' }
]
我尝试的是以下内容:
db.someCollection.aggregate([
{
$project: {
lists: {
$filter: {
input: "$lists",
as: "list",
cond: { $gte: [ "$$list.meta.expiresOn", 1516620762985 ] }
}
}
}
},
{ $unwind :'$lists'},
{
$project : {
_id:0,
name: '$lists.name',
}
}
])
在CosmosDb的Mongo Shell中运行时,我得到ERROR: Command aggregate failed: Unknown server error occurred when processing this request..
。
我试图将聚合分成几部分并单独运行,除了第一部分外,它们似乎都有效。
我做错了什么?
LE:尝试了另一种方法,类似于之前的方法,但这一方法返回空白:
db.clients.aggregate([
{ $unwind: '$lists'},
{
$match: {
'lists.meta.expiresOn': { $gt: 1516620762985 }
}
},
{
$project : {
_id:0,
name: '$lists.name',
}
}
])
并且旁注......这样的聚合表现得如何?我是否提到我是这个领域的初学者? :)
谢谢!
答案 0 :(得分:0)
我遇到了同样的问题,我在cosmosdb上有一个3.6版本的mongo实例和另一个3.2版本的实例,第一个可以正常工作,但第二个则不能。
两个本地版本(没有cosmosdb)都可以正常工作。