有关mongoDB查询的建议

时间:2018-12-18 16:31:16

标签: mongodb mongoose

我有一个MongoDB模式

let fbUserSchema = new Schema({
  facebookId: {type: String, required: true, index: true, unique: true},
  name: String,
  .
  .
  matched:[]
});

这是匹配项存储在数据库中的方式。

matched: [{
   charm: 234134134134, // it is a facebookId
   requester: 239846019346 // it is a facebookId
  },
  {
   charm: 576452234, // it is a facebookId
   requester: 58456363 // it is a facebookId
  },
   ....]

charmrequesterfacebookId's,其名称可以从相同的架构中获取

查询任何用户时,我得到的matched []是对象数组。

fbUser.findOne({ 'facebookId': '34234234234'}, 'matched', (err, matched) => {
   console.log(matched);
 });

我想以一种可以从fbUserSchema获取charmrequester的名称的方式进行查询。 (我想在结果中添加charmNamerequesterName

我希望结果为

matched: [{
       charm: 234134134134, // it is a facebookId
       charmName: 'Alex',
       requester: 239846019346 // it is a facebookId
       requesterName: 'Bella',
      },
      {
       charm: 576452234, // it is a facebookId
       charmName: 'Julia',
       requester: 58456363 // it is a facebookId
       requesterName: 'John',
      },
     ....]

这可以在一个MongoDB查询中有效地完成吗?

1 个答案:

答案 0 :(得分:1)

这应该使您尽一切努力:)

  1. 使用aggregation pipeline
  2. 'facebookId': '34234234234'中的$match开始
  3. $unwind matched
  4. 对同一集合进行$lookup,以首先在charm id上进行匹配
  5. 在同一收藏夹上执行$lookup,现在在requester id上进行匹配
  6. 现在您已拥有所需的所有数据...只需进行分组/投影以匹配所需的结果即可。