在 Mongodb C# 中获取有关同一集合的其他数据
get additional data on same collection in Mongodb C#
我有一个名为“用户”的集合。我正在传递 userid 以获取记录。除此之外,我还需要额外的 10 个 last updatedAt(DateTime) 记录,不包括 userid 记录但加在一起。因此,在这种情况下,总返回结果将为 11。是否可以使用相同的查询?我尝试使用 Or 和 lookup 但无法使其按预期工作。
感谢任何帮助。
User collection:
[{
"id" : "123456",
"name" : "foo",
"addressIds" : [ObjectId(234567)]
} ,
"id" : "345678",
"name" : "bar",
"addressIds" : [ObjectId(678565), ObjectId(567456)]
}]
Address collection:
[{
"_id":"234567",
"district" : "district1",
"pincode" : "568923",
},
{
"_id":"678565",
"district" : "district2",
"pincode" : "568924",
},
{
"_id":"567456",
"district" : "district3",
"pincode" : "568925",
}]
使用构面,我有用户和地址 ID。我可以在用户中获得 AddressIds 的实际文档吗?
编辑:
您可以使用 $facet
,像这样:
db.collection.aggregate([
{$sort: {date: -1}},
{$facet: {
byTate: [{$limit: 10}],
byUser: [{$match: {userId: 455845}}]
}
},
{$project: {
byDate: {
$filter: {
input: "$byDate",
as: "item",
cond: {$ne: ["$$item",{"$arrayElemAt": ["$byUser", 0]}]}
}
},
byUser: 1,
}
},
{
$project: {
byDate: {$slice: ["$byDate", 10]},
byUser: 1
}
}
])
您可以看到它在 playground 上有效。
在 userId 之间切换:455845 / 455845 以查看两种情况。
我有一个名为“用户”的集合。我正在传递 userid 以获取记录。除此之外,我还需要额外的 10 个 last updatedAt(DateTime) 记录,不包括 userid 记录但加在一起。因此,在这种情况下,总返回结果将为 11。是否可以使用相同的查询?我尝试使用 Or 和 lookup 但无法使其按预期工作。 感谢任何帮助。
User collection:
[{
"id" : "123456",
"name" : "foo",
"addressIds" : [ObjectId(234567)]
} ,
"id" : "345678",
"name" : "bar",
"addressIds" : [ObjectId(678565), ObjectId(567456)]
}]
Address collection:
[{
"_id":"234567",
"district" : "district1",
"pincode" : "568923",
},
{
"_id":"678565",
"district" : "district2",
"pincode" : "568924",
},
{
"_id":"567456",
"district" : "district3",
"pincode" : "568925",
}]
使用构面,我有用户和地址 ID。我可以在用户中获得 AddressIds 的实际文档吗?
编辑:
您可以使用 $facet
,像这样:
db.collection.aggregate([
{$sort: {date: -1}},
{$facet: {
byTate: [{$limit: 10}],
byUser: [{$match: {userId: 455845}}]
}
},
{$project: {
byDate: {
$filter: {
input: "$byDate",
as: "item",
cond: {$ne: ["$$item",{"$arrayElemAt": ["$byUser", 0]}]}
}
},
byUser: 1,
}
},
{
$project: {
byDate: {$slice: ["$byDate", 10]},
byUser: 1
}
}
])
您可以看到它在 playground 上有效。
在 userId 之间切换:455845 / 455845 以查看两种情况。