1

Mongoose を使用して検索内からドキュメントを更新する際に問題が発生しています。この問題は、ドキュメントをオブジェクト (doc = req.body など) で上書きしようとした場合にのみ発生します。ただし、元のドキュメントのプロパティを特定の文字列に直接設定することはできます (例: doc.name = 'jason borne';)。

res.body がオブジェクトであることを確認したので、このように設定できない理由がわかりません。

Client.findById(req.params.client_id, function (err, client) {

    if (err)
        return next(new restify.InternalError(err));

    // client.name = 'jason borne';

            client = req.body;

    client.save(function(err) {

        if (err)
            return next(new restify.InternalError(err));

        res.send(client);

    });

});

ドキュメントをオブジェクトに設定しようとすると、次のエラーが表示されます。

TypeError: オブジェクト # にはメソッド 'save' がありません

シンプルな Client.update(...) コマンドで更新できることは承知していますが、この方法ではスキーマ ミドルウェアや検証を実行できません (これはMongoose のドキュメントに記載されています)。

何かご意見は?NodeとMongooseは初めてです。

4

2 に答える 2

2

現在発生している症状は、mogooseモデルオブジェクトを(save、findなどのメソッドで)体から解析された単純なjsonオブジェクトに置き換えているという事実によって引き起こされていますが、これは欠落していsaveます。

検索/保存の代わりに更新を実行してみてください。

 Client.update({_id: req.params.client_id}, {$set : req.body}, function(err) {...});

req.bodyまたは、をclientオブジェクトにマージしてみてください。

于 2013-01-15T21:19:02.443 に答える
2

現在のように単に再ポイントするのではなく、アンダースコアのメソッドのようなものを使用してextend、のプロパティをオブジェクトにコピーするreq.body必要があります。clientclientreq.body

var _ = require('underscore');
Client.findById(req.params.client_id, function (err, client) {

    if (err)
        return next(new restify.InternalError(err));

    _.extend(client, req.body);
    client.save(function(err) {
        if (err)
            return next(new restify.InternalError(err));
        res.send(client);
    });
});
于 2013-01-15T21:26:34.207 に答える