Остановить Мангуста от создания свойства id для элементов массива вложенных документов



Если у вас есть вложенный массив, Мангуст автоматически создает идентификаторы для каждого из них. Пример:



{
_id: "mainId"
subdocArray: [
{
_id: "unwantedId",
field: "value"
},
{
_id: "unwantedId",
field: "value"
}
]
}


есть ли способ сказать Мангусту не создавать идентификаторы для объектов в массиве?

598   5  

5 ответов:

это просто, вы можете определить это в подсхеме:

var mongoose = require("mongoose");

var subSchema = mongoose.Schema({
    //your subschema content
},{ _id : false });

var schema = mongoose.Schema({
    // schema content
    subSchemaCollection : [subSchema]
});

var model = mongoose.model('tablename', schema);

вы можете создавать вложенные документы без схемы и избегать _id. Просто добавьте параметр _id:false, чтобы ваше объявление вложенного документа.

var schema = new mongoose.Schema({
   field1:{type:String},
   subdocArray:[{
      _id:false,
      field :{type:String}
   }]
});

Это позволит предотвратить создание поле _id в subdoc. Испытано в Мангусте 3.8.1

кроме того, если вы используете синтаксис объектного литерала для указания подсхемы, вы также можете просто добавить _id: false чтобы подавить его.

{
   sub: {
      property1: String,
      property2: String,
      _id: false
   }
}

Я использую Мангуст 4.6.3 и все, что мне нужно было сделать, это добавить _id: false в схеме, нет необходимости делать подсхему.

{
    _id: ObjectId
    subdocArray: [
      {
        _id: false,
        field: "String"
      }
    ]
}

в мангусте В. 3 Теперь у вас есть альтернативный способ создания вложенных документов без родителей - детские отношения. И эти суб-документы не будут иметь индекс

var mongoose = require("mongoose");

var schema = mongoose.Schema({
  // schema content
subSchema: [{
    firstname: 'sub name',
    lastname: 'last name'
  }]
});

var model = mongoose.model('tablename', schema);

Comments

    Ничего не найдено.