我想说我想从子文档中返回最新插入的文档。我希望能够使用_id
的{{1}}
所以我到目前为止我有这个查询,但它返回tags数组中的所有值。
54a1845def7572cd0e3fe288
Mongodb数组:
db.modules.findOne({_id:"ui","svn_branches.branch":"Rocky"},{"svn_branches.$":1})
答案 0 :(得分:2)
MongoDB中的查询不返回子文档(或者,如在您的情况下,返回子文档的子文档)。它们匹配并返回集合中的文档。文档的形状可以通过投影稍微改变一下,但它是有限的。如果您想要查找最新的标记,您可能希望使文档代表标记。在MongoDB中,在数组中使用数组通常是一个坏主意。
如果这是一个不常见的操作,并且不需要特别快,则可以使用聚合:
db.modules.aggregate([
{ "$unwind" : "$svn_branches" },
{ "$unwind" : "$svn_branches.tags" },
{ "$sort" : { "svn_branches.tags.updated_at" : -1 } },
{ "$group" : { "_id" : "$_id", "latest_tag" : { "$first" : "$svn_branches.tags" } } }
])
答案 1 :(得分:0)
一个简单的解决方案可以是:假设我们有一个category-document和items-subdocument。
const category = await Category.findOne({ _id:req.params.categoryId });
const lastIndex: number = category.items.length - 1;
console.log(category.items[lastIndex]);
因为mongodb在最后一个索引处插入了最新的子文档,因此我们可以通过上述方法轻松获取它。
答案 2 :(得分:0)
我需要找到子文档的最后一个条目,并设法使其与$slice
投影运算符:mondodb.com > $slice (projection)
db.modules.find({_id:'ui', 'svn_branches.branch':'Rocky'},
{ 'svn_branches.tags': {$slice:-1} } )
我只有一个级别,如果这行不通,请告诉我。