【问题标题】:Monk / Mongodb performing find inside callback of another findMonk / Mongodb 在另一个 find 的回调中执行 find
【发布时间】:2019-12-15 07:27:06
【问题描述】:

我有以下文档结构来记录用户的好友列表:

{ 
    "_id" : ObjectId("5df4d0ac6480078812e7b2ff"), 
    "name" : "Alice"
    "friends" : [ "Bob", "John" ] 
}

当收到一个用户请求时,比如"Alice",我想检索 Alice 的朋友以及他们的 _id 字段,返回一组朋友姓名和他们的 _id 的响应,例如

[{"name": "Bob", "_id": "abcdef"}, {"name": "John", "_id": "ghjikl"}

如何在 Monk 中执行此操作?

我的想法是在用户上使用collection.find() 来检索朋友列表,然后循环执行另一个find() 以获取他们的_id。但这不起作用,因为我无法从嵌套的 find() 回调函数之外更新变量。

【问题讨论】:

    标签: mongodb express mongodb-query monk


    【解决方案1】:

    这个aggregation 会给你一些接近你想要的东西:

    db.users.aggregate([
      {
        "$match": {
          "name": "Alice"
        }
      },
      {
        "$lookup": {
          "from": "users",
          "as": "friends",
          "localField": "friends",
          "foreignField": "name"
        }
      },
      {
        "$project": {
          "_id": 0,
          "friends._id": 1,
          "friends.name": 1,
    
        }
      }
    ])
    

    输出:

    [
      {
        "friends": [
          {
            "_id": "abcdef",
            "name": "Bob"
          },
          {
            "_id": "ghjikl",
            "name": "John"
          }
        ]
      }
    ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-08
      • 2014-09-26
      • 1970-01-01
      • 1970-01-01
      • 2013-12-17
      • 2015-06-05
      • 2013-03-15
      • 1970-01-01
      相关资源
      最近更新 更多