node 联表查询

1.模拟插入1条订单数据

MongoClient.connect(url, { useNewUrlParser: true, useUnifiedTopology: true }, function(err, db) {
  if(err) throw err;
  var dbo = db.db('koa'); // koa 库名
  var obj = { _id: 1, product_id: 151, status: 1 }; // 模拟插入1条订单数据
  dbo.collection('orders').insertOne(obj, function(err, res) {
    if(err) throw err;
    console.log('文档插入成功');
    db.close();
  })
});

2.模拟插入3条产品数据

MongoClient.connect(url, { useNewUrlParser: true, useUnifiedTopology: true }, function(err, db) {
  if(err) throw err;
  var dbo = db.db('koa'); // koa 库名
  var obj = [
    { _id: 151, name: '笔记本电脑' },
    { _id: 152, name: '耳机' },
    { _id: 153, name: '台式电脑' }
  ]; // 模拟插入3条产品数据
  dbo.collection('products').insertMany(obj, function(err, res) {
    if(err) throw err;
    console.log('插入的文档数量为: ' + res.insertedCount);
    db.close();
  })
});

3.表关联 -- aggregate

var MongoClient = require('mongodb').MongoClient;
var url = require('./config/keys').mongoURI;

/**
 * 表关联
 * aggregate
*/
MongoClient.connect(url, { useNewUrlParser: true, useUnifiedTopology: true }, function(err, db) {
  if(err) throw err;
  var dbo = db.db('koa'); // koa 库名
  dbo.collection('orders').aggregate([ // 聚合函数
    {
      $lookup: {
        from: 'products',         // 右集合
        localField: 'product_id', // 左集合 join 字段
        foreignField: '_id',      // 右集合 join 字段
        as: 'order_details',      // 新生成字段(类型array)
      }
    }
  ]).toArray(function(err, res) {
    if(err) throw err;
    console.log(JSON.stringify(res));
    db.close();
  })
});

.

原文地址:https://www.cnblogs.com/crazycode2/p/15110268.html