0

ノードアプリケーションで Mongo コレクション (Mongoose を使用) を返していますが、返されたときにそれをループして、各コレクションアイテムに新しい値を追加しようとしています。

アンダースコアのそれぞれを使用していますが、何らかの理由でリストに追加しているものを追加していません。私は何を間違っていますか?

私のコード:

Submission.find({}).sort('date', -1).execFind(function (err, submissions) {

    _.each(submissions, function (submission, key) {
        submissions[key]['newValue'] = 'test';
    });
});

しかし、newValue : 'test' に追加していません。

console.log にすると、次のようになります。

[{
    user_id: 1234,
    title: 'testing tyhe slug generation',
    description: '',
    topic: 'movies',
    source: 'http://www.apple.com',
    ip: '127.0.0.1',
    approved: false,
    slug: 'testing-tyhe slug generation',
    _id: 5133a60e16661e41db000001,
    created: Sun Mar 03 2013 11:35:42 GMT-0800 (PST),
    thumbnail: '9146edb190a960c1cc3b0eda7d9f719d'
}, {
    user_id: 1234,
    title: 'New submission test slug',
    description: '',
    topic: 'food-drink',
    source: 'http://www.apple.com',
    ip: '127.0.0.1',
    approved: false,
    slug: 'new-submission-test-slug',
    _id: 5133a6c8adcde860db000001,
    created: Sun Mar 03 2013 11:38:48 GMT-0800 (PST),
    thumbnail: 'd80003cf9c81a4982fbb81c99abb52dc'
}]

これは非同期の問題ですか?

4

1 に答える 1

0

@bob_cobb、Mongoose は結果を「ドキュメント」のコレクションとして返します。JSON ではなく、JavaScript オブジェクトの配列を意味します。したがって、これらのドキュメントで不注意な操作を行うと、データベースの内容にも影響します。

ここで私の理解によると、ドキュメントに動的または追加の属性を追加したいと考えています。したがって、次のようにします。

Submission.find({}).sort('date', -1).execFind(function (err, submissions) {

    _.each(submissions, function (submission, key) {
        //Here you are converting javascript object into JSON. 
        //That is remove all the functions associated with "submission" object.
        submissions[key] = submissions[key].toJSON(); 
        submissions[key]['newValue'] = 'test';

        //Note: Here submission.save() won't work.
    });

});
于 2013-03-07T11:52:44.517 に答える