我正在尝试$lookup
在MongoDB 3.6上使用两个字段来执行。我已经在这里阅读了文档和类似的问题,但是我找不到问题所在。
集合acls
:
[ { _id: 1, FolderId: 4, Sid: 'S-123-456' }
{ _id: 2, FolderId: 5, Sid: 'S-234-567' }
{ _id: 3, FolderId: 6, Sid: 'S-345-678' } ]
集合groups
:
[ { _id: 1, ProcessId: 10, Sid: 'S-123-456', Users: [ 'user1', 'user2'] }
{ _id: 2, ProcessId: 10, Sid: 'S-234-567', Users: [ 'user1'] }
{ _id: 3, ProcessId: 20, Sid: 'S-123-456', Users: [ 'user2'] } ]
查询:
db.acls.aggregate({
$lookup:
{
from: 'groups',
let: { 'ProcessId': 10, 'GroupSid': '$Sid' },
pipeline: [{
$match: {
$expr: {
$and: [
{
$eq: [ '$ProcessId', '$$ProcessId' ]
},
{
$eq: [ '$Sid', '$$GroupSid' ]
}
]
}
}
}],
as: 'grouplist'
}
})
我期望返回类似以下内容:
{ _id: 1, FolderId: 4, Sid: 'S-123-456',
grouplist: [ { _id: 1, ProcessId: 10, Sid: 'S-123-456', Users: [ 'user1', 'user2'] }] }
但是相反,我正在'Script executed successfully, but there are no results to show'
使用Robo 3T。
试试这个,它工作正常。您的let关键字必须以小写字母开头
db.acls.aggregate([
{
$lookup:
{
from: "groups",
let: { processid: 10, sid: "$Sid" },
pipeline: [
{ $match:
{ $expr:
{ $and:
[
{ $eq: [ "$ProcessId", "$$processid" ] },
{ $gte: [ "$Sid", "$$sid" ] }
]
}
}
}
],
as: "grouplist"
}
}
])
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句