MongoDB - 带有 NodeJS 的 Mongoose 查找并加入集合

MongoDB - Mongoose with NodeJS find and join collection

我需要查找并加入另一个集合,以从企业集合中获取企业数据以及保存在配置文件集合中的配置文件描述。最新版本的 nodejs 和 mongoose。

businesses = await Business.find({}, "business_id name industry")
      .limit(limit * 1)
      .skip((page - 1) * limit)
      .exec();

这就是代码,我稍后也需要它来进行分页。

现在我在 Mongoose 中找到了 $Lookup 的解决方案。我的代码看起来像

Business.aggregate([{
        $lookup: {
            from: "profiles", // collection name in db
            localField: "business_id",
            foreignField: "business_id",
            as: "profile"
        }
    }]).exec(function(err, profile) {
        console.log(profile[0]);
    });

业务和个人资料保存在字段中 business_id。所以我不能使用 Mongoose 的 _id。我以前从未使用过 mongoose 和两个集合。

现在的问题是配置文件[0] 未连接到正确的业务。因此,该配置文件与上面的业务发现的是另一个配置文件。

我需要找到最新的 10 个企业并加入另一个集合并获取个人资料详细信息。我在这里做错了什么,有人可以举出这种行为的例子吗?

使用https://mongoosejs.com/docs/populate.html

对于你的情况,你在这里没有 ObjectId,你可以使用 populate-virtuals

So far you've only populated based on the _id field. However, that's sometimes not the right choice. In particular, arrays that grow without bound are a MongoDB anti-pattern. Using mongoose virtuals, you can define more sophisticated relationships between documents.

const BusinessSchema = new Schema({
  name: String
});
BusinessSchema.virtual('profile', {
  ref: 'Profile', // The model to use
  localField: 'business_id', // Find people where `localField`
  foreignField: 'business_id', // is equal to `foreignField`
  // If `justOne` is true, 'members' will be a single doc as opposed to
  // an array. `justOne` is false by default.
  justOne: false,
  options: { sort: { name: -1 }, limit: 5 } // Query options, see  "bit.ly/mongoose-query-options"
});