Я хотел связать две разные коллекции mongodb и mongoose, используя агрегатную функцию поиска $

#mongodb #mongoose #aggregate #lookup

#mongodb #mongoose #агрегат #поиск

Вопрос:

Мой код успешно компилируется, поскольку я не получаю никаких ошибок. Но массив, который я хотел объединить с полем другой коллекции, по-прежнему пуст.

 const express = require('express');
const mongoose = require('mongoose');
const user = require('../schema');
const router = express.Router();

router.get('/', function (req, res) {
  user.db1.aggregate([{
      $lookup: {
        from: 'db2',
        localField: 'fullname',
        foreignField: 'skills',
        as: 'user_Details'
      }
    }

  ]).exec(function (err, data) {
    if (err) throw err
    console.log("getting user data from database")
    res.send(data)
  })
});

module.exports = router;
  

Комментарии:

1. Обычно происходит опечатка. Можете ли вы привести пример вашей базы данных (возможно, достаточно одного документа из каждой коллекции)?

2. const UserSchema = новый мангуст. Схема ({идентификатор пользователя: {тип: строка}, полное имя: {тип: строка}, телефон: {тип: номер}, электронная почта: {тип: строка}, }) const skillSchema = новый мангуст. Схема ({идентификатор пользователя:{тип: число}, навыки: {тип: строка},

3. вот как я описал тип в схеме.

4. Хм, я не уверен, что вы имели в виду, написав user.db1.aggregate(...) ? Что такое user.db1 ? Синтаксис, о котором я знаю, будет как раз user.aggregate(... тем, где user находится связанная модель.

5. согласен с тем, что вы сказали, но в схеме я экспортировал модели как db1:users, поэтому здесь я импортировал схему в константу с именем user, и оттуда я использую db1 в качестве модели.