8

したがって、コレクション名を function() として設定する、クライアント側ベースのパーティショニング スキーマを作成したいと考えています。私の擬似コードは次のようなものです。

var mongoose = require('mongoose'),
  Schema = mongoose.Schema,

var ConvForUserSchema = new Schema({
  user_id: Number,
  conv_hash: String,
  archived: Boolean,
  unread: Boolean
}, function CollectionName() {
  return (this.user_id % 10000);
});

これは、読み取りと書き込みの両方が期待どおりに機能するように、moongose を介して何らかの方法で可能ですか?

4

7 に答える 7

14


こんにちは、次のように、スキーマ モデルを動的な名前で宣言するだけです。

var mongoose  =  require('mongoose');
var Schema  =  mongoose.Schema;

// our schema 

function dynamicSchema(prefix){
    var addressSchema = new Schema({
        dir : {type : String, required : true},    //los 2 nombres delimitados por coma (,) ej. Alberto,Andres
        city : {type : String, required: true},   //la misma estructura que para los nombres ej. Acosta, Arteta 
        postal : {type : Number, required : true},
        _home_type : {type : Schema.Types.ObjectId, required : true, ref : prefix + '.home_type'},
        state : {type : String, required : true},
        telefono : String,
        registered : {type : Date, default: Date.now }
    });
    return mongoose.model(prefix + '.address', addressSchema);
}

//no we export dynamicSchema function
module.exports = dynamicSchema;

したがって、コードのどこでもこれを行うことができます:

var userAdress = require('address.js')(id_user);
var usrAdrs1 = new userAddress({...});
    userAdrs1.save();

次に、mongo シェルに移動してコレクションをリストします (mydb を使用してからコレクションを表示します)。uid プレフィックス付きのアドレスの新しいコレクションが表示されます。このようにして、mongoose は異なるユーザー uid ごとに新しい 1 つのコレクション アドレスを作成します。

于 2014-06-10T00:19:09.063 に答える