MongoDB:由两个具有不同值的字段重新组合

时间:2018-02-21 22:05:00

标签: node.js mongodb typescript

我在Typescript中创建了一个nodejs应用程序。 我想通过指定one_id值的两个字段“one_id”和“two_id”对文档进行分组。

以下是我的收藏中的数据:

df %>% group_by(gr) %>% filter(all(!grepl("\\.",vals)))

如果我想与one_id =“307973260186877954”进行配对,则例外结果为:(必须有另一个带有“反转”字段内容的文件)

{  
   "_id":"5a8b2953007a1922f00124fd",
   "one_id":"307973260186877954",
   "two_id":"415228402765660181"
}
{  
   "_id":"5a8b29a3007a1922f00124fe",
   "one_id":"415228402765660181",
   "two_id":"307973260186877954"
}
{  
   "_id":"5a8c119bf6ba49302c3ef67e",
   "one_id":"394199132195127306",
   "two_id":"270131587092316161"
}
{  
   "_id":"5a8c11a4f6ba49302c3ef67f",
   "one_id":"270131587092316161",
   "two_id":"394199132195127306"
}
{  
   "_id":"5a8c33132a182308a836bc1c",
   "one_id":"307973260186877954",
   "two_id":"397036401075552256"
}
{  
   "_id":"5a8c33242a182308a836bc1d",
   "one_id":"397036401075552256",
   "two_id":"307973260186877954"
}

我不知道你是否了解我。

谢谢,我希望有人能理解我!

2 个答案:

答案 0 :(得分:0)

我认为这应该是你的解决方案。不确定。刚试了一下

db.TempCollections.aggregate([  
   {  
      $lookup:{  
         from:"TempCollections",
         let:{
            leftone_id:"$one_id",
            lefttwo_id:"$two_id"
        },
        pipeline:[
            {
                $match: {
                      $expr: {
                         $and: [
                            {
                               $eq: [
                                  "$one_id",
                                  "$$lefttwo_id"
                               ]
                            },
                            {
                               $eq: [
                                  "$two_id",
                                  "$$leftone_id"
                               ]
                            }
                         ]
                      }
                   }
            }
        ],
         as:"Final"
      }
   }
],
{
allowDiskUse:true
});

答案 1 :(得分:0)

您可以使用$lookup自行加入行,并在匹配时输出文档,并$project除外以删除已连接的字段。

db.col.aggregate([
  {"$lookup":{
    "from":col,
    "localField":"one_id",
    "foreignField":"two_id",
    "as":"onetwo"
  }},
  {"$lookup":{
    "from":col,
    "localField":"two_id",
    "foreignField":"one_id",
    "as":"twoone"
  }},
  {"$match":{"onetwo.0":{"$exists":true}, "twoone.0":{"$exists":true}}},
  {"$project":{"onetwo":0,"twoone":0}}
])