我知道这听起来很奇怪,但是请仔细阅读整个案例。
我有一个运行了一年以上的MongoDB 3.2.5版,今天我对一个集合进行了一个简单的查询:
db.collection_name.find({chkst:0},{chkst:1});
据我所知,响应应该是文档,其中chkst
字段为0,而_id
的文档为ObjectID
。但是,答复是:
{
"_id" : ObjectId("5fe7f8c08cdc06066edb5258"),
"chkst" : NumberInt(1)
}
注意到值chkst
吗?我知道这是不可能的。这是Studio3T的图片,因为我之前觉得RoboMongo可能有问题!
正如我所说,这是一个很奇怪的案例,我可能不是第一个遇到这种情况的人,但是我在MongoDB中4年来第一次遇到这样的问题!
我想补充一点,同时对同一个集合进行汇总会得出正确的结果。
db.collection_name.aggregate([
{"$group": {"_id": "$chkst", "count": {"$sum": 1}}}
]);
这产生了预期的结果!与聚合中的NO问题一样,但find会产生意外结果。
任何帮助或解释都很好!
经过一小段简短的思考之后,我发现该字段已被索引!因此,我只是简单地删除了索引并再次添加了它。
VOILA!问题已解决!。也许update.writeErrors.index
在更新过程中确实给出了错误,或者在该字段上写了错误,但未处理!有什么方法可以监视索引写入失败?我部署了MongoDB Ops Manager,用于管理4个分片集群,尽管这是一个独立的集群。
在我100%确信这是原因之前,我无法将其作为答案。