7

私のドキュメントには、clientsクライアントIDの配列を含むはずのというフィールドが含まれています。

{
  "first_name":"Nick",
  "last_name":"Parsons",
  "email":"nick@movementstrategy.com",
  "password":"foo",
  "clients":[
    "50f5e901545cf990c500000f",
    "50f5e90b545cf990c5000010"
  ]
}

私のデータはJSONとして受信され、Mongoに直接送信してドキュメントを作成します。何らかの理由で、clients作成時に入力されていないため、手動で文字列として入力する必要があります。

私のスキーマはかなり単純で、次のように定義されています。

var userSchema = new Schema({
    first_name: {
        type: String,
        trim: true
    },
    last_name: {
        type: String,
        trim: true
    },  
    email: {
        type: String,
        trim: true,
        lowercase: true,
        index: true,
        unique: true,
        required: true
    },
    password: String,
    clients: [Schema.Types.ObjectId]
});

私の理解では、クライアントを正しく定義しました。しかし、作成を行っているときに、clients配列にデータを取り込むことができません。mongoに渡されるrawオブジェクトのイベントは良さそうです。

{ 
    first_name: 'Zack',
    last_name: 'S',
    email: 'zack@movementstrategy.com',
    password: 'test',
    clients: [
       '50f5e901545cf990c500000f', 
       '50f5e90b545cf990c5000010' 
    ] 
}

正しくキャストするために入力に対して行う必要がある特別なことはありますか?

4

2 に答える 2

10

簡単な修正。着信アレイにデータが入力されているかどうかを確認します。もしそうなら、私はそれぞれをループし、変換されたObjectIdバージョンを配列にプッシュします。どうやらmongoose.Types.ObjectId('STRING');一般的な文字列を有効なマングースIDに変換することができます。

// if clients was passed with associated client ids
if (data.clients.length > 0) {

    _.map(data.clients, function(cid) {

        // push client id (converted from string to mongo object id) into clients
        user.clients.push(mongoose.Types.ObjectId(cid));

    });

}

これが他の誰かに役立つことを願っています。

于 2013-01-16T19:30:08.843 に答える
1

受け入れられた答えは時代遅れかもしれません...

このコレクションを更新する場合は、$push更新を使用することをお勧めします。この更新方法は、コレクション内の配列に追加するだけの場合に更新を実行しないように設計されています。

http://docs.mongodb.org/manual/reference/operator/update/push/

于 2015-05-19T11:16:31.337 に答える