0

私はノードが初めてで、Feathersjs を使用しています。私は mongoose populate を使って と の関係を作ろうとしてい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;
  }
}]

これで、次のように入力できるはずですtasksUserModel.find({}).populate('tasks')

また、

にアクセスできるサービス クラスにいる場合はapp、次のようにモデルを取得できます app.service('users').Model。次に、上記と同じ populate クエリを実行します。

于 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 に答える