gpt4 book ai didi

mongodb - 根据嵌入对象的记录对集合进行排序

转载 作者:可可西里 更新时间:2023-11-01 10:01:33 24 4
gpt4 key购买 nike

给定一个用户列表,每个用户都有自己的嵌入式项目(带时间戳)。我如何获得用户列表及其最新项目?

例如:

{"_id" : ObjectId("4dcc2a5b3db44135cf000004"),
"name" : "User1",
"projects" : [
{"created_at" : ISODate("2011-05-13T08:16:22Z"),
"_id" : ObjectId("4dcce8d63db4410f04000001"),
"name" : "User1 Project 1"
},
{"created_at" : ISODate("2011-05-13T08:16:22Z"),
"_id" : ObjectId("4dcce8d63db4410f04000002"),
"name" : "User1 Project 2"
}
]
}
{"_id" : ObjectId("4dcc2fed3db44135cf000007"),
"name" : "User2",
"projects" : [
{"created_at" : ISODate("2011-05-13T09:36:33Z"),
"_id" : ObjectId("4dccfba13db4410f68000001"),
"name" : User2 Project 2"
}
]
}

我想以表格方式显示这些数据:|用户名 |最新项目名称 |

我意识到使用 mongoid 我可以做类似的事情

users = User.all
users.each do | user |
p user.name
p user.latest_project_name
end

with latest_project_name as :
def latest_project_name
self.projects.desc(:created_at).try(:name) || ''
end

问题是:1. 这会像在 sql 中一样引入 n+1 个问题吗?2.如果我想按最新的项目名称对表格进行排序怎么办?我可以在 mongodb 中执行此操作吗?还是我必须执行 Array.sort?

注意:我是 mongodb 的新手,所以这可能是一个设计问题。仍在弄清楚如何在 mongodb 中思考。

最佳答案

在此阶段您无法对嵌入式文档进行排序,相反,如果您需要对项目进行排序,则应将它们拆分到自己的集合中,并在用户和项目之间使用文档引用。

参见:https://jira.mongodb.org/browse/SERVER-142

另外,您可以使用 _id 字段进行排序,因为 ObjectID 包含时间戳(这实际上消除了对 created_at 字段的需要,尽管拥有它并没有什么坏处)。请参阅:http://www.mongodb.org/display/DOCS/Object+IDs如果您想了解更多关于 ObjectID 的格式。

关于mongodb - 根据嵌入对象的记录对集合进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6001977/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com