mongo结果与唯一字段不一致

Inconsistent mongo results with unique field

本文关键字:字段 不一致 唯一 结果 mongo      更新时间:2023-09-26

不确定这个问题是什么时候出现的,但我无法始终如一地从mongo中获取项目。我数据库里有4000多个项目。这是模式。

var Order = new Schema({
 code: {
  type: String,
  unique: true
},
...
});

现在运行一些查询:

Order.find().exec(function(err, orders) {
 console.log(orders.length); // always 101 
})
Order.find().limit(100000).exec(function(err, orders) {
 console.log(orders.length); // varies, sometimes 1150, 1790, 2046 - never more
})

现在,如果我从架构中删除"unique:true",它将始终返回总量:

Order.find().exec(function(err, orders) {
 console.log(orders.length); // always 4213 (correct total)
})

你知道为什么会发生这种行为吗?afaik代码都是唯一的(来自商家的订单)。这在3.8.6、3.8.8 上进行了测试

Ok问题确实是唯一索引不存在/已损坏。我对在游戏后期添加唯一索引感到内疚,可能已经有一些重复操作阻止了Mongo创建索引。

我删除了重复项,然后在mongo shell中这样做:

db.orders({name: 1}, {unique: true, dropDubs: true});

我认为以上内容会消除重复,但它会因为重复而消亡。我确信有一种shell方法可以做到这一点,但我只是用一些js代码完成了,然后运行上面的代码来重新创建可以用验证的索引

db.orders.getIndexes()