2016-10-20 46 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

相关问题