Javascript mongo结果与唯一字段不一致

Javascript mongo结果与唯一字段不一致,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,不确定这个问题何时出现,但我无法始终从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(1000

不确定这个问题何时出现,但我无法始终从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)
})

你知道为什么会发生这种行为吗?所有代码都是来自商家的唯一订单。这在3.8.6、3.8.8上进行了测试,确定了唯一索引不存在/损坏的问题。我对后来在游戏中添加独特的索引感到内疚,可能已经有一些重复,这阻止了Mongo创建索引

我删除了副本,然后在mongo shell中执行以下操作:

db.orders({name: 1}, {unique: true, dropDubs: true});
我认为上面的代码会删除DUP,但它会因为DUP而消亡。我确信有一种shell方法可以做到这一点,但我只是用一些js代码完成了这一点,然后运行上面的程序来重新创建索引,该索引可以通过以下方式进行验证:

db.orders.getIndexes()

当您在MongoDB shell上键入以下命令时,您会得到什么:db.orders.distinct'code.length?我得到4199-这似乎是正确的-我收到了一些重复的命令-这就是为什么我添加了unique,但似乎并不总是停止重复的onesHmm。您可以检查err参数是否为null,或者mongoose是否报告了错误。因此,在回调中,如果添加if err console.logerr;你有什么发现吗?我猜-那里有重复的项目,Mongo正在以同步的方式疯狂和窒息-它永远不会超过2046,这是一个重复的赌注-有几次它会提前停止,所以我认为它a在重复时停止,b在同步或不同步的过程中获取,有时会提前停止。我打赌,如果我删除DUP,它可能会工作,尽管我希望有一些错误。提示:可能只是你的帖子中的拼写错误,但应该是db.orders.ensureIndex而不是db.orders,而且它是dropdup,而不是dropDubs。哈哈,这是个问题:我想知道,但从其他答案中复制了它-谢谢