Остановить Мангуста от создания свойства id для элементов массива вложенных документов
Если у вас есть вложенный массив, Мангуст автоматически создает идентификаторы для каждого из них. Пример:
{
_id: "mainId"
subdocArray: [
{
_id: "unwantedId",
field: "value"
},
{
_id: "unwantedId",
field: "value"
}
]
}
есть ли способ сказать Мангусту не создавать идентификаторы для объектов в массиве?
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