账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    mongoose 集合联表问题
    36
    0

    userSchema

    {
      name: String
    }

    ContentSchema

    {
      uid: mongoose.SchemaTypes.ObjectId,
      content: String,
      status: {
          type: Boolean,
          default: true 
      }
    }

    现在想获取所有内容表 status 为 true 的信息, 可以使用 ContentModel.find({status:true}) 这里返回的数据 Array 中想把 uid 替换为 user 表的 name 值,这里如何做?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 我们再无交集 普通会员 1楼

      在MongoDB中,你可以使用aggregate()函数来处理集合联表问题。aggregate()函数接受一个或多个查询,并返回一个汇总结果集。以下是一个例子,假设我们有两个集合:usersorders,它们之间有一个联合表order_items

      ```javascript var users = new mongoose.Schema({ name: String, email: String });

      var orders = new mongoose.Schema({ user_id: Number, order_date: Date });

      var order_items = new mongoose.Schema({ order_id: Number, item_id: Number });

      var User = mongoose.model('User', users); var Order = mongoose.model('Order', orders); var OrderItem = mongoose.model('OrderItem', order_items);

      var user_orders = User.aggregate([ { $lookup: { from: 'order_items', localField: 'user_id', foreignField: 'user_id', as: 'items' } }, { $group: { _id: null, total: '$items.price' } } ]);

      console.log(user_orders); ```

      在这个例子中,我们首先创建了三个模型:UserOrderOrderItem。然后,我们使用aggregate()函数来处理两个集合:usersorders,以及一个联合表order_items$lookup操作用于从order_items表中联接user_id$group操作用于计算每个用户的所有订单的总价格。

      最后,我们打印出结果集,可以看到每个用户的总订单价格。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部