0

上記のテクノロジを使用して最初のアプリを構築しています。ここ数週間 Backbone を使用してきましたが、今は mongo db でノード上の Express を使用して API を構築しようとしています。(注、現時点ではネイティブノードのmongoモジュールを使用しています。)

バックボーン コレクションに mongo のデータを入力すると、デフォルトで _id フィールドが含まれます。mongo でドキュメントを更新しようとするまでは問題ありません。バックボーンは _id を文字列として返します。これはオブジェクト ID である必要があります。Mongo は、許可されていない _id を変更しようとしていると考えているため、更新に失敗します。mongo をデータで更新する関数のコピーを次に示します。

exports.updateMenu = function(req, res) {
var id = req.params._id;
var item = req.body;

db.collection('menu', function(err, collection) {
    collection.update({'_id':new BSON.ObjectID(id)}, item, {safe:true}, function(err, result) {
        if (err) {
            console.log('Error updating menu: ' + err);
            res.send({'error':'An error has occurred'});
        } else {
            console.log('' + result + ' document(s) updated');
            res.send(item);
        }
    });
});

}

ここに私が得るエラーがあります。ご覧のとおり、私が提供した _id を持つドキュメントは、_id を文字列に変更しようとしています。

メニューの更新エラー: MongoError: 文書 old の _id を変更できません:{ id: 1、名前: "ホットドッグ"、コスト: 2.99、説明: "お好みのチーズとソースを添えたラージ ビーフ ホットドッグ"、カテゴリ: "食品", _id: ObjectId('51645e0bd63580bc6c000001') } new:{ id: "1", name: "ホットドッグ", cost: "77", description: "ラージ ビーフ ホットドッグ お好みのチーズとソース", category: "食べ物" , _id: "51645e0bd63580bc6c000001", エラー: "エラーが発生しました" }

4

1 に答える 1

2

item から _id メンバーを削除してみてください。したがって、最初の 3 行は次の 4 行になります。

exports.updateMenu = function(req, res) {
    var id = req.params._id;
    var item = req.body;
    delete( item._id );
于 2013-04-11T11:18:56.460 に答える