2016-09-01 6 views
1

プライマリキーを入力する必要はありませんが、mongodbではプライマリキーを自動生成します。 私は{type:ObjectId、required:false}を使用しますが、プライマリキーを空にするために動作しません。入力にpprimaryキーをオプションにする別の方法がありますか?ありがとうmongooseに入力するためのプライマリキー/ _idオプションの設定方法

残りのAPIモデル

var mongoose = require("mongoose"); 
var Schema = mongoose.Schema; 
var ObjectId = Schema.ObjectId 

var accessmenu = new Schema({ 
    _id : {type : ObjectId,required: false}, 
    acc_id : String, 
    name : String, 
    read : Boolean, 
    execute : Boolean 
},{ collection: 'access_menu'}); 

var accessmenu = mongoose.model("accessmenu",accessmenu); 
module.exports.accessmenu = accessmenu; 

残りAPI

app.put("/access_menu/:id",function(req,res){ 
    var AccessMenu = new accessmenu({ 
     _id : req.body._id, 
     acc_id : req.body.acc_id, 
     name : req.body.name, 
     read : req.body.read, 
     execute : req.body.execute 
    }); 
    AccessMenu.save(function(err){ 
     if(err) 
     { 
      accessmenu.update({_id : req.params.id},{$set:{acc_id : req.body.acc_id, 
       name : req.body.name, 
       read : req.body.read, 
       execute : req.body.execute 
       }},function(err,users){ 
       if(err) 
       { 
        data['error'] = 1; 
        data['Access_Menu'] = "update faill"; 
        res.json(data); 
       } 
       else 
       { 
        data['error'] = 0; 
        data['Access_Menu'] = "update success"; 
        res.json(data); 
       } 
      }); 
     } 
     else 
     { 
      data['error'] = 0; 
      data['Access_Menu'] = "input success"; 
      res.json(data); 
     } 
    }); 
}); 

script.js

if($scope.data_acc_lv.length > 0) 
    { 
     for(var i = 0;i<$scope.data_acc_lv.length;i++) 
     { 
      var input3 = { 
       "_id" : $scope.data_acc_lv[i]._id, 
       "acc_id":$scope.accLvID, 
       "name": $scope.data_acc_lv[i].name, 
       "read": $scope.data_acc_lv[i].read, 
       "execute": $scope.data_acc_lv[i].execute 
      } 
      $http.put("http://localhost:22345/access_menu/" + $scope.data_acc_lv[i]._id,input3) 
      .success(function(res,err){ 
       if(res.error == 0) 
       { 
        $scope.data_acc_lv.length = 0; 
       } 
       else 
       { 
        console.log(err); 
       } 

      }); 
     } 
    } 
+0

'スキーマ内_id'を含める必要はありません... ... https://docs.mongodb.com/manual/reference/method/ObjectIdの詳細/ –

+0

しかし、スキーマに_idを含めなかった場合、http.deleteまたはhttp.getを実行すると_idを取得できますか? @sss –

+0

はい..明らかに、あなたが言ったことを試した後、それは –

答えて

2

1である場合、マングースは、デフォルトでは、あなたのスキーマの各_idフィールドを割り当てますスキーマコンストラクタに渡されません。割り当てられる型は、MongoDBのデフォルト動作と一致するObjectIdです。

子スキーマに_idを追加したくない場合は、このオプションを使用して無効にすることができます。

// disabled _id 
var childSchema = new Schema({ name: String }, { _id: false }); 
var parentSchema = new Schema({ children: [childSchema] }); 

このオプションは、サブドキュメントでのみ使用できます。 MongooseはIDを知らなくても文書を保存できないので、_idなしで文書を保存しようとするとエラーになります。あなたがレコードを保存するとき、それが自動生成されます

http://mongoosejs.com/docs/guide.html

関連する問題