0

我是节点新手,我正在使用 Feathersjs。users我正在尝试使用猫鼬填充来做和之间的关系tasks

我的模型:

user-model.js

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const userSchema = new Schema({
email: {type: String, required: true, unique: true},
password: { type: String, required: true },
tasks: [{ type: Schema.Types.ObjectId, ref: 'Task' }],
createdAt: { type: Date, 'default': Date.now },
updatedAt: { type: Date, 'default': Date.now }
});

var Task = mongoose.model('Task', storySchema);
const userModel = mongoose.model('user', userSchema);

module.exports = userModel;

task-model.js

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const taskSchema = new Schema({
title: { type: String, required: true },
_creator : { type: String, ref: 'User' },
createdAt: { type: Date, 'default': Date.now },
updatedAt: { type: Date, 'default': Date.now }
});

var User = mongoose.model('user', storySchema);
const taskModel = mongoose.model('task', taskSchema);

module.exports = taskModel;

当我添加一个新任务时,user.tasks 仍然是空的:

> db.users.find().pretty()
{
    "_id" : ObjectId("5832da6919756a0edc2dfc59"),
    "email" : "igorpollo@gmail.com",
    "password" : "$2a$10$DToGYQ8smdfsK4oJPXmcyOdIfxXEaQGO5P16AhzBlrpESUMt5baNi",
    "updatedAt" : ISODate("2016-11-21T11:28:41.371Z"),
    "createdAt" : ISODate("2016-11-21T11:28:41.371Z"),
    "tasks" : [ ],
    "__v" : 0
  }
 > db.tasks.find().pretty()
 {
    "_id" : ObjectId("5832da7619756a0edc2dfc5a"),
    "title" : "test",
    "_creator" : "5832da6919756a0edc2dfc59",
    "updatedAt" : ISODate("2016-11-21T11:28:54.470Z"),
    "createdAt" : ISODate("2016-11-21T11:28:54.470Z"),
    "__v" : 0
}
4

2 回答 2

2

我知道这是一个旧帖子。我正在回答,因为它可以帮助任何人。

首先,上面的代码没有显示你是如何插入数据的。

这样您就可以在 FeathersJS 中进行填充。在版本中测试4.3.4

before: {
  ...,
  create: [(ctx) => {
    ctx.app.service('users').find({
      query: {
        $populate: ['tasks']
      }
    });
  }
}]

或者,

在钩子里面,你可以像这样访问你的猫鼬模型(例如:在创建钩子之前):

before: {
  ...,
  create: [(ctx) => {
    const UserModel = ctx.app.service('users').Model;
  }
}]

现在您应该能够tasks像这样填充:UserModel.find({}).populate('tasks')

或者,

如果您在可以访问的服务类中app,则可以像这样获取模型: app.service('users').Model然后运行上面显示的相同填充查询。

于 2019-09-17T09:50:20.513 回答
-1

MongoDB 中没有连接,但有时我们仍然希望引用其他集合中的文档,就像在您的用例中一样。这就是人口进来的地方。

因此,您可以尝试使用mongoose以下方法:

User                  // Mongoose model
 .find({})
 .populate('tasks')   // Populate referenced attributes
 .exec()              // Executes the query and return Promise

阅读更多关于猫鼬人口的信息:http: //mongoosejs.com/docs/populate.html

于 2016-11-21T11:48:15.080 回答