Какой тип хранить массив идентификаторов объектов MongoDB?

Я хочу сохранить массив ObjectId, который я получаю через интерфейс REST через mongoose, в mongodb. Я постоянно сталкиваюсь с проблемой ошибки приведения при сохранении идентификаторов объектов из интерфейса REST в БД. Серверный код написан на машинописном языке.

Схема:

var WaSchema = new mongoose.Schema({
    ownerId: { type: 'String', required: true },
    options: { type: 'String', required: false },
    launch:  [{ type : 'ObjectId', required: true }],
});

Из интерфейса REST я получаю для "lanch" массив строк: launch: Array<string>

Вот как я сейчас делаю сохранение:

WaModel.findOneAndUpdate(query, {
            ownerId: userId,
            options: wa.options,
            launch: wa.launch
        },
        { upsert: true },
        (err, doc) => {
            if (err) throw err
            else return 'successfully saved/updated';
        })
  1. Как должен выглядеть ObjectId в интерфейсе REST для корректного приведения? Это просто жало, например «575e52790c0fc76a11e381d0», или ему нужен префикс, например ObjectId («575e52790c0fc76a11e381d0»)?

  2. Как будет выглядеть массив в конце? Это немного зависит от ответа № 1

  3. Я видел функцию заполнения, может ли это помочь здесь?


person Michael Hoeller    schedule 14.06.2016    source источник


Ответы (2)


1) Если вы используете мангуста, вам не нужно добавлять префикс ObjectId. Вы можете сохранить как массив ссылочных идентификаторов.

var insertData = {
            ownerId: userId,
            options: wa.options,
            launch:  [ '56cea954d82cd11004ee67b5','56ceaa00d82cd11004ee67bc' ]
           }

2) В конце ваш массив будет выглядеть так.

"launch" : [ 
        ObjectId("56cea954d82cd11004ee67b5"), 
        ObjectId("56ceaa00d82cd11004ee67bc")            
    ],

3) И да, здесь будет полезна функция заполнения. Он заполнит весь массив. После заполнения это будет выглядеть так

"launch" : [ 
             { _id: '56cea954d82cd11004ee67b5',
               .... other fields
             },
             { _id: '56ceaa00d82cd11004ee67bc',
              .... other fields
             },
          ]
person vartika    schedule 14.06.2016

Я бы сказал, что идентификаторы объектов хранятся в массиве с типом данных ObjectId. Итак, чтобы сделать это, вы должны преобразовать идентификатор в строковом формате '575e52790c0fc76a11e381d0' в тип ObjectId.

Используйте следующее, чтобы преобразовать его:

Учтите, что идентификатор a user (userId)

var stringUserId = '575e52790c0fc76a11e381d0';
var ObjectId = mongoose.Types.ObjectId;
var userId = ObjectId(stringUserId); //This should assign a value of datatype ObjectId to userId
person Sagar Gopale    schedule 14.06.2016