Mongoose: Apakah mungkin untuk mengisi tanpa `_id` ?

Dibuat pada 26 Des 2014  ·  82Komentar  ·  Sumber: Automattic/mongoose

Saya memeriksa API http://mongoosejs.com/docs/populate.html dan mencobanya. Tampaknya populate hanya dapat bekerja di foreign _id . Bahkan ada opsi match , itu hanya menambahkan lebih banyak kondisi penyaringan pada kondisi kueri _id . Tidak ada cara untuk hanya mengisi dengan bidang yang tidak terlibat dengan _id .

Dalam proyek saya, kami menyimpan _id sebagai ObjectId dan memiliki bidang lain sebagai Nomor kenaikan otomatis. Misalnya, model customers memiliki _id sebagai Objek dan cuid sebagai nomor tambahan. Koleksi lain hanya merujuk ke cuid bukan ke _id .

Apakah akan bagus untuk dapat menyesuaikan ini?
Apakah ada batasan desain yang menyebabkan fitur ini hilang?

enhancement

Komentar yang paling membantu

@rturk Saya sangat suka plugin itu, terima kasih telah menunjukkannya. @alexmingoia apa pendapat Anda tentang: menggabungkan modul Anda menjadi inti luwak? Gagasan menggunakan virtual untuk menangani populasi yang lebih umum (tanpa memiliki bidang aktual yang bertahan ke db) sangat kuat.

Semua 82 komentar

Akan sangat bagus jika dapat menyesuaikan ini, tetapi saat ini kami menerapkan _id . Saya tidak bisa memikirkan alasan yang bagus dari atas kepala saya mengapa tidak. Saya harus menyelidiki lebih lanjut.

Kemampuan untuk mengisi tidak hanya pada satu bidang lain tetapi bahkan pada satu set bidang hampir diperlukan untuk mendukung sharding dengan benar, yang merupakan kasus penggunaan besar bagi kami.

Misalnya, kami memiliki koleksi "siswa" yang mungkin memiliki kunci shard untuk "langganan"; ketika kami mengisi data siswa dari model bagian kami (yang berisi array siswa), kami memiliki langganan pada dokumen tetapi hanya akan mencari berdasarkan _id yang disimpan di "siswa" daripada memungkinkan kami untuk menentukan bahwa itu juga harus dipetakan dokumen "tugas" bidang untuk "tugas" pada siswa.

Karena kami kemudian akan melakukan pencarian tanpa kunci pecahan saat melakukan pengisian, itu membuat pecahan tidak berguna, mengharuskan semua pecahan dipukul untuk mengambil data, bukan hanya satu.

Ini adalah sesuatu yang kami akan bersedia untuk mendanai pengembangan atau bahkan melakukannya sendiri jika kami bisa mendapatkan beberapa panduan tentang di mana melakukan pekerjaan itu. Ini adalah kebutuhan utama bagi perusahaan kami (GradeCam).

@taxilian apakah Anda menyetel opsi skema shardKey ? AFAIK untuk itulah opsi itu.

Saya belum benar-benar bergerak untuk mulai melakukannya karena saya telah mencari solusi untuk masalah ini; apakah populate memperhitungkan shardKey? Pemahaman saya adalah bahwa shardKey hanya memengaruhi pembaruan dan sisipan

Akan sangat bagus untuk dapat menentukan bidang yang akan "bergabung dengan", misalnya saya ingin dapat mengisi tidak hanya dengan bidang userId (yaitu _id) tetapi juga oleh userType, userGroup dll.
Terima kasih!

+1

+1 akan sangat berguna

+1 sama di sini!

+1 suka memiliki ini

+1

+1

+1

Akan sangat menyenangkan untuk dapat memilih variabel yang ingin Anda isi dengan menambahkan parameter seperti key :

Misalnya jika ada posting yang ingin saya isi parameter author dan comments , tetapi parameter tersebut menahan parameter non ObjectId (nama pengguna pengguna dan judul komentar) sebelum populasi:

{
author: "user1",
comments:["comment5", "comment6"],
title:"Post1"
}

Akan menyenangkan untuk dapat menambahkan parameter seperti "kunci" untuk memberi tahu mongo parameter mana yang harus dicari:

Posts.find().populate([{path:"author", model:"Users", key:"username"}, {path:"comments", model:"Comments", key:"title"}])

Ini akan mengisi parameter author dengan Pengguna yang ditemukan oleh nama pengguna serta mengisi parameter comments dengan komentar yang ditemukan berdasarkan judulnya (saya menyadari komentar berdasarkan judul agak tidak realistis, tetapi Anda mendapatkan inti nya).

+1

+1

+1

+1

+1

+1

+1

Besar setuju. Saya ingin kemampuan untuk mendefinisikan skema populasi khusus. Ini akan bagus untuk skema apa pun dengan satu atau lebih bidang yang merupakan jalur file, memungkinkan populasi membaca dari penyimpanan.

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

Coba kode ini: https://github.com/alexmingoia/mongoose-populate-virtuals.

Sebenarnya, adakah alasan untuk tidak menggabungkan kode Alex ke dalam repo utama dan menjadikannya fitur inti?

@rturk Saya sangat suka plugin itu, terima kasih telah menunjukkannya. @alexmingoia apa pendapat Anda tentang: menggabungkan modul Anda menjadi inti luwak? Gagasan menggunakan virtual untuk menangani populasi yang lebih umum (tanpa memiliki bidang aktual yang bertahan ke db) sangat kuat.

Itu akan ideal. Akan jauh lebih baik di inti karena membebani Query.prototype.populate dan fungsionalitas inti lainnya.

Satu-satunya hal yang menghalangi saya untuk membuat permintaan tarik adalah hanya ada sedikit atau tidak ada cakupan pengujian, dan dokumentasi yang kurang. Saya menggunakannya dalam produksi dalam beberapa skenario dan stabil, tetapi saya pikir jika seseorang menulis suite uji, itu mungkin mengekspos beberapa masalah kecil atau keanehan yang perlu didokumentasikan.

Apakah seseorang bersedia menangani test suite? Jika tidak - saya bisa melakukannya tetapi jangan berharap itu akan mendarat sebelum bulan depan.

Aku akan melihatnya. Saya sudah lama ingin menulis ulang populate :)

Ping saya di IRC (freenode, amingoia ) atau gitter jika Anda memiliki pertanyaan tentang kode.

https://github.com/whitecolor/mongoose-fill juga melakukan pekerjaan yang baik untuk mengisi menggunakan data dari model lain

+1

+1

+1

ini wajib :)

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+3

+1

Apakah halaman ini membantu?
0 / 5 - 0 peringkat