上記のテクノロジを使用して最初のアプリを構築しています。ここ数週間 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", エラー: "エラーが発生しました" }