【问题标题】:Suggestion for a mongoDB query对 mongoDB 查询的建议
【发布时间】:2019-05-19 03:02:29
【问题描述】:

我有一个 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 查询中高效完成吗?

【问题讨论】:

  • fbUser.findOne({ 'facebookId': '34234234234'}, 'matched.charmName', 'matched.requesterName', (err, mapped) => { console.log(matched); } );
  • @Govna matched.charmName & matched.requesterName 不存在我想编写查询,以便将它们添加到我的结果中

标签: mongodb mongoose


【解决方案1】:

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

  1. 使用aggregation pipeline
  2. $match'facebookId': '34234234234' 开头
  3. $unwindmatched
  4. 在同一个集合上执行$lookup 以首先匹配charm id
  5. 在同一个集合上创建 $lookup 以匹配 requester id
  6. 现在您拥有所需的所有数据......只需进行分组/投影以匹配您想要的结果。

【讨论】:

  • 你可以给我一个查询吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 2019-04-04
  • 1970-01-01
相关资源
最近更新 更多