首页 > 解决方案 > 对 mongoDB 查询的建议

问题描述

我有一个 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
  },
   ....]

charm并且可以从同一架构中获取其requester名称facebookId's

当我查询任何用户时,我matched []匹配的是一个对象数组。

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

我想以一种可以从 fbUserSchema中获取charm和的名称的方式进行查询。requester(我想在我的结果中添加charmName, )requesterName

我希望结果为

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 查询中有效地完成吗?

标签: mongodbmongoose

解决方案


这应该会让你付出一些努力:)

  1. 使用聚合管道
  2. $match从你的一个开始'facebookId': '34234234234'
  3. $放松 matched
  4. 对同一个集合进行$lookup以首先匹配charmid
  5. 对同一个集合进行$lookup以匹配现在的requesterid
  6. 现在您拥有所需的所有数据......只需进行分组/投影以匹配您想要的结果。

推荐阅读