как запросить у родительской модели массив другой модели в Mongoose? - PullRequest
0 голосов
/ 05 января 2019

У меня есть две схемы для пользователя и задачи. У каждого todo есть владелец как пользователь, у каждого пользователя есть массив todos.

// user.js
const TodoSchema = require('./todo').TodoSchema;

var UserSchema = mongoose.Schema({
	name: {
		type: String,
		required: true
	},
	todos: {
		type: [TodoSchema]
	}
});

module.exports.UserSchema = UserSchema;
module.exports.UserModel = mongoose.model('UserModel', UserSchema);


// todo.js
var TodoSchema = mongoose.Schema({
	body: {
		type: String, required: true
	},
	owner: {
		type: mongoose.Schema.Types.ObjectId,
		ref: 'UserModel',
		required: true
	}
});

module.exports.TodoSchema = TodoSchema;
module.exports.TodoModel = mongoose.model('TodoModel', TodoSchema);

Я ввел данные вот так.

var nUser = new UserModel({
  name: "Alex
)};

nUser.save().then(user => {
  var t = new TodoModel({
    body: "my new todo",
    owner: user._id
  });
  t.save().then();
});

Но проблема в том, что я хочу получить все задачи от определенного пользователя, что-то вроде этого ... Какой правильный путь?

UserModel.findOne({name: "Alex"})
.then(user => {
  // user.todos
});

P.S. Я могу сделать это как TodoModel.find ({owner: specific_user._id}), но я хочу это из UserModel.

1 Ответ

0 голосов
/ 06 января 2019

Поскольку вы спрашиваете о правильном способе сделать это, я начну с вашей пользовательской схемы. Если вы хотите найти все задачи пользователя, то размещение документов задачи внутри массива в документе пользователя не требуется. Поэтому вам, вероятно, следует удалить это из вашей схемы.

После этого вы можете использовать простое агрегирование, чтобы получить желаемый результат.

UserModel.aggregate([
    {
      $match:{
        name:"Alex"
      }
    },
    {
      $lookup:{
        from:"todomodels",
        localField:"$_id",
        foreignField:"$owner",
        as:"todos"
      }
    }
  ])

это вернет все задачи для этого пользователя в массиве с тем же именем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...