gpt4 book ai didi

MongoDb 查询需要被框住

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

我有一个名为“Dealer”的集合,其中包含以下字段。

1) 用户名2) 经销商编号3)代码4) 来源(具有值 'UUM'、'MMT'、'TTC')

在上面的集合中,我需要使用 (userId + dealerId) 的唯一组合来获取唯一的经销商记录。如果两条记录具有相同的“userId”和“dealerId”,那么我需要检查原始字段,并且需要在结果集中返回值不等于“UUM”的记录。

到目前为止,这是我达到的目标:

db.dealer.aggregate(
[
{
$sort: { origin: 1 }
},
{
$group:
{
_id: {
dealerId:"$dealerId",
recordId:"$recordId"
},
origin: {
$first: "$origin"
}
}
}
])

如何对上述场景进行聚合查询。感谢任何帮助。

提前致谢。

最佳答案

为了减少内存使用,我会过滤掉没有 UUM 来源的文档。然后按经销商和用户分组。

我不确定您为什么要按经销商 + 记录进行排序和分组。

设置

> db.dealerTest.find()
{ "_id" : 1, "userId" : "u1", "dealerId" : "d1", "code" : 1, "origin" : "UUM" }
{ "_id" : 2, "userId" : "u1", "dealerId" : "d1", "code" : 2, "origin" : "UUM" }
{ "_id" : 3, "userId" : "u1", "dealerId" : "d1", "code" : 3, "origin" : "TTC" }
{ "_id" : 4, "userId" : "u2", "dealerId" : "d1", "code" : 4, "origin" : "TTC" }
{ "_id" : 5, "userId" : "u2", "dealerId" : "d1", "code" : 5, "origin" : "MMT" }
{ "_id" : 6, "userId" : "u2", "dealerId" : "d2", "code" : 6, "origin" : "UUM" }

代码:

db.dealerTest.aggregate([{
$match: {
origin: {
$ne: "UUM"
}
}
}, {
$group: {
_id: {
dealerId: "$dealerId",
userId: "$userId"
},
docIds: { $addToSet : "$_id" },
origins: { $addToSet : "$origin" }
}
}]);

输出:

{ "_id" : { "dealerId" : "d1", "userId" : "u2" }, "docIds" : [ 5, 4 ], "origins" : [ "MMT", "TTC" ] }
{ "_id" : { "dealerId" : "d1", "userId" : "u1" }, "docIds" : [ 3 ], "origins" : [ "TTC" ] }

关于MongoDb 查询需要被框住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28194131/

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