我正在构建一个聚合管道,以合并来自同一DDBB上的2个集合的数据。源集合为TmpPersoOptins,目标为RecipientAggregate。源数据如下所示:
{
"_id": 61231246,
"PersoOptins": 1
}
目的地的数据如下所示:
{
"_id" : NumberLong(1)
"Member" : {
"AccountState" : NumberInt(1),
"BirthDate" : ISODate("1986-06-05T22:00:00.000+0000"),
"CreationDate" : ISODate("2001-01-30T23:56:00.000+0000"),
"Culture" : "fr-FR",
"Email" : "test@hotmail.com",
"FirstName" : "Lorem",
"Gender" : NumberInt(1),
"GodFatherId" : NumberLong(657),
"LastName" : "Ipsum",
"ModificationDate" : ISODate("2022-04-20T15:44:00.000+0000"),
"SchemaVersion" : NumberInt(1),
"SiteId" : NumberInt(1)
}
}
我想将源属性“PersoOptins”添加到目标上不包含它的所有记录中。我正在合并on _id字段。这是我的管道:
[
{
$fill:
{
output: {
OptinPerso: {
value: 0,
},
},
},
},
{
$lookup:
{
from: "RecipientAggregate",
localField: "_id",
foreignField: "_id",
pipeline: [
{
$match: {
"Member.OptinPerso": {
$exists: false,
},
},
},
],
as: "Result",
},
},
{
$unwind:
{
path: "$Result",
preserveNullAndEmptyArrays: false,
},
},
{
$project:
{
_id: 1,
"Member.OptinPerso": "$PersoOptins",
},
},
{
$merge:
{
into: "RecipientAggregate",
on: "_id",
whenMatched: "merge",
},
},
]
然而,我在合并阶段得到错误Cannot find index to verify that join fields will be unique
,我找不到问题,因为用于连接的_id字段是两个集合的PK。唯一的区别是source _id字段是常规索引,而destination上的_id是聚集索引。有什么提示吗?
1条答案
按热度按时间e4yzc0pl1#
好吧,我找到了问题,张贴在这里只是为了记录。MongoDB 6.0.2上的合并管道步骤无法使用聚集索引。我必须添加一个新的常规唯一索引才能让它工作。