猫鼬栖息在羽毛中

时间:2016-11-21 11:37:36

标签: node.js mongodb mongoose feathersjs

我是节点中的新手,我正在使用Feathersjs。 我正在尝试使用mongoose populate来处理user-model.jsconst 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;

> 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 }

... is running beyond physical memory limits. Current usage: 4.6 GB of 4 GB physical memory used; 6.3 GB of 20 GB virtual memory used. Killing container. ...

当我添加新任务时,user.tasks仍为空:

mapreduce.reduce.memory.mb

2 个答案:

答案 0 :(得分:0)

我知道这是一个旧帖子。如果有帮助,我会回答。

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

这样,您可以在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;
  }
}]

现在您应该可以像这样填充tasksUserModel.find({}).populate('tasks')

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

答案 1 :(得分:-1)

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

因此,您可以使用DTO进行尝试,如下所示:

mongoose

详细了解猫鼬的人口数量: http://mongoosejs.com/docs/populate.html