【发布时间】:2023-03-15 21:45:01
【问题描述】:
我有一个关于 $elemMatch 的小问题。这是 MongoDB 中的文档:
{
_id:'asdf1234',
latest: '2.0.0',
foo : [{
v : '1.0.0',
text : "Hello"
},{
v: '2.0.0',
text : "Hello v2.0.0"
}]
}
我只想返回 v 与 latest 字段中相同的 foo。现在我可以做这样的事情:
var a = function(id, version) {
//id = 'asdf1234'
//version = '2.0.0'
return MyCollection.findOne({_id:id}, {fields:{foo:{$elemMatch:{v:version}}});
}
我将只使用带有 v:'2.0.0' 的对象获取 foo 数组。但是现在我想在数组中获取最新的对象,所以参数 version 将是“最新的”并且函数看起来像这样:
var a = function(id, version) {
//id = 'asdf1234'
//version = 'latest'
if(version != 'latest') {
return MyCollection.findOne({_id:id}, {fields:{foo:{$elemMatch:{v:version}}});
} else {
var doc = MyCollection.findOne({_id:id});
//Some code to get object where v == doc.latest
}
}
现在的问题 - 我可以只通过一个查询从 foo 数组中获取元素吗,如下所示:
MyCollection.findOne({_id:id}, {fields:{foo:{$elemMatch:{v:'$latest? or fields.latest?'}}});
我不想遍历数组来获取最新元素。当然,如果没有机会像这样得到它,我会写寻找代码:)
感谢您的任何回答!
【问题讨论】: