我的收藏中有两种类型的结构:
{
_id: "date1",
users: [{"user": "123", ...}, {"user": "456", ...}]
}
和
{
_id: "date2",
points: [{"point": "1234", ...}, {"point": "5678", ...}]
}
我需要制作一个agregation,它会返回这些文档的列表,只返回特定的点或用户信息以及skip和limit。类似的东西:
[
{_id: "date1", user: {"user": "123", ...}},
{_id: "date2", point: {"point": "1234", ...}},
]
我已经习惯了,我是mongo的新人,你能给我任何推荐吗?
collection.aggregate([
{"$unwind": "$users"},
{"$unwind": "$points"},
{"$match": {"$or": [
{'users.user': an_user},
{'points.point': a_point}]}},
{"$sort": {"_id": -1}},
{"$skip": 10},
{"$limit": 10}
])
答案 0 :(得分:0)
包含一个特定用户或一个特定点的信息,具体取决于该文档中的点或用户密钥
根据您提供的文档示例,您可以使用db.collection.find(),例如:
db.collection.find({"users.user": a_user}, {"users.$":1});
db.collection.find({"points.point": a_point}, {"points.$":1});
根据您的使用情况,这可能不太理想,因为您执行find()
两次。
这将返回您的_id
文档列表。上面的查询相当于说:
Find all documents in the collection
where in array field users contain a user 'a_user'
OR in array field points contain a point 'a_point'
说完上述内容后,您应该重新考虑您的文档架构。根据您的使用情况,您可能会在以后查询数据时遇到困难,并可能影响查询性能。请查看MongoDB Data Models以提供有关如何设计架构的更多信息。