Mongoose: dokumen yang disematkan dalam objek dengan kunci arbitrer?

Dibuat pada 12 Jan 2012  ·  40Komentar  ·  Sumber: Automattic/mongoose

Apakah ada cara untuk menggunakan dokumen yang disematkan di dalam objek yang tidak memiliki kunci yang telah ditentukan? yaitu Daripada memiliki situasi seperti ini:

var myschema = new mongoose.Schema({
   field : { foo: String, bar: String }
});

Mampu mengatakan sesuatu seperti:

var myschema = new mongoose.Schema({
   field : { *: String }
});

Membuatnya sedikit lebih banyak array seperti itu - tetapi idenya adalah saya tidak tahu kuncinya sebelumnya, tetapi saya masih ingin memiliki dokumen yang disematkan.

enhancement

Komentar yang paling membantu

Fitur ini WAJIB.

Semua 40 komentar

tidak ada.

Bagaimana dengan tipe Mixed ?

@aheckmann - itulah yang saya takutkan, apakah Anda tahu apakah ini ada di peta jalan atau jika ini hanya sesuatu yang tidak terlalu dibutuhkan?

@TooTallNate - benar, itu defaultnya. Masalahnya adalah dengan campuran Anda kehilangan semua validasi/skema yang Anda dapatkan dengan dokumen tertanam yang didukung (bernama kunci & larik).

@ordrin tidak ada yang membutuhkannya sebelumnya

OK, tidak menyadari saya melakukan sesuatu yang begitu esoteris! Berengsek.

Saya memiliki kasus penggunaan untuk ini, setidaknya saya percaya itu relevan.

Saya membuat sistem ACL.

Tugas saya memiliki _id yang merupakan Strings.

Saya ingin menyematkan id tersebut ke dalam catatan Anggota anggota saya (berbagai tugas yang dapat mereka lakukan).

Meskipun saya tentu saja dapat meletakkan array string di properti "tugas" mereka, saya akan, idealnya, ingin menggunakan DBrefs dalam skenario ini sehingga saya dapat menarik metadata.

@ordrin Saya baru saja membaca ulang ini. Sudahkah Anda melihat menggunakan Mixed? Saya mungkin salah paham b/ci memikirkan "dokumen yang disematkan" secara berbeda dari bagaimana MongoDB merujuknya. Inilah yang secara umum dapat Anda lakukan dengan Mixed.

var myschema = new mongoose.Schema({
   field : mongoose.Schema.Types.Mixed
});

Ini cukup dekat dengan apa yang Anda minta. Dalam hal ini "bidang' dapat ditetapkan ke nilai apa pun. Anda bisa menetapkannya sebagai objek literal dan menambahkan validator khusus untuk memastikan nilainya adalah string.

myschema.path('field').validate(yourCustomValidator, 'your custom vaildator failed msg');

function yourCustomValidator (value) {
  // check that value is an object etc
  return true|false
}

var M = mongoose.model('M', myschema);
var m = new M;
m.field = { might: "work", for: "you" }
m.save();

http://mongoosejs.com/docs/schematypes.html

Saya hanya ingin menambahkan bahwa saya sedang mencari fungsionalitas yang mirip dengan ini. Saya ingin memiliki kunci dinamis dengan nilai skema yang diketik dengan kuat. Akan luar biasa jika kita dapat menghindari keharusan melakukan handroll validasi.

new mongoose.Schema({
    dynamicKey: {foo: Number, isAwesome: Boolean}
});

or 

new mongoose.Schema({
    dynamicKey: value is always only a Number
});

+1

+1

+1.

Saya memposting posting SO tentang masalah ini. Jika ada yang tahu cara yang baik untuk memvalidasi properti dengan kunci dinamis, jangan ragu untuk memposting.

Jika itu dibangun di saya mungkin tata letak skema seperti

new Schema({
  myDynamicKeyObj: {
    type: Dynamic, 
    key: {type: String, match: /[a-z]*/i}, 
    val: [String] 
  } 
})

+1

Akan sangat bagus untuk memiliki kunci dinamis. Jika Anda ingin menulis skema json, Anda dapat melakukan sesuatu seperti misalnya untuk mencocokkan kunci integer:

"^[0-9]+$": {
    "$ref": "#/definitions/mydefinition"
}

ada solusi yang memiliki kunci dinamis atau masih tidak?
Contoh 2 objek:
{ 123: { firstname: "firstA", lastname: "lastA" } }
{ 124: { firstname: "firstB", lastname: "lastB" } }

Permasalahan yang sama. Saya ingin melakukan analitik seperti yang dijelaskan di mongodb docs. http://docs.mongodb.org/ecosystem/use-cases/pre-aggregated-reports/

+1

:+1:

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

Saya membutuhkan sumur ini

+1

Hentikan +1 yang tidak berarti itu, yang berakhir dengan menonton kotak masuk orang.

Ada tombol "Berlangganan" dan "Reaksi" karena suatu alasan.

+1

@qqilihq , lakukan implementasikan plx, lalu kita hentikan +1, kthxbye

"tidak ada yang membutuhkannya sebelumnya"
5 tahun kemudian, satu ton +1 kemudian, masih belum ada pembaruan tentang ini?

Karena ini adalah masalah tertua yang dapat saya temukan terkait dengan masalah ini, saya akan membukanya kembali dan menutup #1522 sehingga sebanyak mungkin orang dapat melacak pembaruan.

Fitur ini WAJIB.

Bagaimana fitur ini dirilis dengan sangat pelan sehingga saya tidak menyadarinya?! 💯.

@adamreisnz lol terima kasih. Di mana Anda mencari pembaruan fitur Mongoose? Ubah log? Indonesia?

Changelog biasanya, tetapi pasti melewatkan yang satu ini!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat