Zatrzymaj Mongoose od tworzenia właściwości id dla pozycji tablicy pod-dokumentu

Jeśli masz tablice subdokumentów, Mongoose automatycznie tworzy identyfikatory dla każdego z nich. Przykład:

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

Czy istnieje sposób, aby Mangusta nie tworzyła identyfikatorów dla obiektów w tablicy?

Author: Talha Awan, 2013-06-22

5 answers

To proste, możesz to zdefiniować w podpunkcie:

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);
 194
Author: throrin19,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-09 11:52:07

Można tworzyć dokumenty podrzędne bez schematu i unikać _id. Wystarczy dodać _id: false do deklaracji subdocument.

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

Zapobiegnie to tworzeniu pola _id w subdoc. Testowane w Mongoose 3.8.1

 90
Author: Joel Grenon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-03 09:01:00

Dodatkowo, jeśli używasz obiektowej składni do określenia podprogramu, możesz po prostu dodać _id: false, aby go supresować.

{
   sub: {
      property1: String,
      property2: String,
      _id: false
   }
}
 30
Author: wlingke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-28 05:12:41

Używam mongoose 4.6.3 i wszystko, co musiałem zrobić, to dodać _id: false w schemacie, nie trzeba robić podprogramu.

{
    _id: ObjectId
    subdocArray: [
      {
        _id: false,
        field: "String"
      }
    ]
}
 13
Author: jemiloii,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-14 23:08:26

W mongoose V. 3 masz teraz alternatywny sposób tworzenia pod-dokumentów bez relacji rodzice-dzieci. A te dokumenty podrzędne nie będą miały indeksu

var mongoose = require("mongoose");

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

var model = mongoose.model('tablename', schema);
 -3
Author: khex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-24 11:00:59