2016-10-20 48 views
0

我想保存數據庫上的點擊座標,但如果x和y是相同的,我不想保存它們。即使我使用複合索引並通過書籍完成任何事情,它仍能保存所有內容。在stackoverflow上有類似的問題,但它不適用於我的代碼。即使使用複合索引,爲什麼重複也會保存? Mongo(Mongoose)

模型架構:

var mongoose = require('mongoose'); 
var uniqueValidator = require('mongoose-unique-validator'); 
require('mongoose-double')(mongoose); 
var Schema = mongoose.Schema; 
var integerValidator = require('mongoose-integer'); 
var SchemaTypes = mongoose.Schema.Types; 

var clickPoint = new Schema({ 
    clicks: [ 
     { 
      x: { 
       type: SchemaTypes.Double 
      }, 
      y: { 
       type: SchemaTypes.Double 
      }, 
      value: { 
       type: Number, 
       integer: true 
      } 
     } 
    ] 
}); 

clickPoint.index({x: 1, y: 1}, {unique: true}); 

clickPoint.plugin(integerValidator); 
clickPoint.plugin(uniqueValidator); 

//export model... 
module.exports = mongoose.model("ClickPoint", clickPoint); 

型號控制器:

var ClickPoint = require('../Models/point'); 

exports.addPoint = function (click) { 
    ClickPoint.findOne(function (err, data) { 
     if(!err) { 
      if(data) { 
       data.clicks.push({ 
        x: click.x, 
        y: click.y, 
        value: click.value 
       }); 
       data.save(); 
      } 
      else { 
       var entry = new ClickPoint({ 
        x: click.x, 
        y: click.y, 
        value: click.value 
       }); 

       entry.save(); 
      } 
     } 
    }) 
}; 

難道說所有的記錄都存儲在一個數組,據我所知,索引允許存儲複本中陣列?如果這是問題,而不是如何保持對象在數組中獨一無二。

+0

難道是所有的記錄存儲在一個數組中,據我所知,索引允許在數組中存儲重複? – Octtavius

回答

1

您指數x & y,而字段clicks.x & clicks.y。如果您正嘗試向數組添加唯一值,爲什麼不使用addToSet

+0

感謝它爲我工作。如果值已經存在,你知道如何調用函數嗎? – Octtavius

相關問題