Пн goose findOne преобразовывает поле типа массива в объект - PullRequest
1 голос
/ 05 мая 2020

Я создавал приложение для чата и сохраняю пользователя со схемой

const UserSchema = new mongoose.Schema({
_id: {
type: String,
required: true,
},
email: {
 type: String,
 required: true,
},
username: {
 type: String,
 required: true,
},
contacts: {
 type: ContactSchema,
},
});

и ContactSchema как

const ContactSchema = new Schema({
 contactUserId: {
 type: String,
 required: true,
},
});

проблема в том, что когда я пытаюсь найти пользователь в оболочке mon go с findOne, он извлекает пользователя с массивом контактов:

{
 "_id" : "49Ff7aRn4baPuTVFefQLulbMIeE2",
 "username" : "john",
 "email" : "doe@gmail.com",
 "__v" : 0,
 "contacts" : [
    {
        "_id" : ObjectId("5eb07958b0315c6303505f74"),
        "contactUserId" : "RHOCbyCtvjQfFzFukxiwS9wV1ly1"
    },
    {
        "_id" : ObjectId("5eb07e4eff338702ba455c8a"),
        "contactUserId" : "tGCkdHh55UgkG8AW0Ab6S9guwcF3"
    }
 ]

}

, но когда я пытаюсь использовать mon goose findOne, он извлекает пользователь с полем контактов в качестве объекта:

{ _id: '49Ff7aRn4baPuTVFefQLulbMIeE2',
 username: 'john',
 email: 'doe@gmail.com',
 __v: 0,
 contacts:
  { '0':
     { _id: 5eb07958b0315c6303505f74,
       contactUserId: 'RHOCbyCtvjQfFzFukxiwS9wV1ly1' },
    '1':
     { _id: 5eb07e4eff338702ba455c8a,
       contactUserId: 'tGCkdHh55UgkG8AW0Ab6S9guwcF3' },
    _id: 5eb086555cbcb03801350d76 } }

Есть ли обходной путь для этого?

Ответы [ 2 ]

3 голосов
/ 05 мая 2020

Это из-за вашего mon goose UserSchema:

Измените contacts: { type: ContactSchema } объекта типа на contacts: [ContactSchema] массива типов объектов, как показано ниже:

const UserSchema = new mongoose.Schema({
  _id: {
    type: String,
    required: true,
  },
  email: {
    type: String,
    required: true,
  },
  username: {
    type: String,
    required: true,
  },
  contacts: [ContactSchema],
});

В оболочке mon go, поскольку у вас нет преобразования, поэтому он довольно прост и возвращает документ из БД как есть.

0 голосов
/ 05 мая 2020
const UserSchema = new mongoose.Schema({
_id: {
type: String,
required: true,
},
email: {
 type: String,
 required: true,
},
username: {
 type: String,
 required: true,
},
contacts: [ContactSchema]
});

контакты должны быть указаны как выше вместо

const UserSchema = new mongoose.Schema({
_id: {
type: String,
required: true,
},
email: {
 type: String,
 required: true,
},
username: {
 type: String,
 required: true,
},
contacts: {
 type: ContactSchema,
},
});
...