Может ли Mongoose заполнять поле напрямую, а не вкладываться в объект? - PullRequest
0 голосов
/ 25 января 2019
const personSchema = Schema({
  name: String,
  age: Number,
});

const storySchema = Schema({
  author: { type: Schema.Types.ObjectId, ref: 'Person' },
  title: String,
});

В приведенном примере выводится:

{
  author: {
    name: 'Ken',
    age:  30,
  },
  title: '...',
}

Мой ожидаемый результат:

{
  authorName: 'Ken',
  authorAge: 30,
  title: '...',
}

Есть ли способ сделать это?Я знаю, что справлюсь после того, как получу список, но я хочу знать, нужно ли мне это делать.

1 Ответ

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

Ну, это возможно, используя агрегатную функцию и трюк, чтобы удовлетворить групповой оператор, извлекающий первое вхождение любого объекта.Этот запрос выполняет работу:

db.person.aggregate(
  [
    {$group:
       { _id:'$_id',
         authorName: {$first:'$author.name'},
         authorAge:{$first:'$author.age'},
         title:{$first:'$title'}
        }
     }
   ],{cursor:{}})

Итак, вот результат:

  {
    "_id": ObjectId("5c4af0df17d4bb03faf6e9fe"),
    "authorName": "Julie",
    "authorAge": 40,
    "title": "..."
  },
  {
    "_id": ObjectId("5c4ae86417d4bb03faf6e9fd"),
    "authorName": "Ken",
    "authorAge": 30,
    "title": "..."
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...