我的mongo文件看起来像这样:

{
    "_id" : ObjectId(abcd),
    "ratingComment" : {
        "_id" : NumberLong(1000),
        "comment" : "Test comment"
    }
}


我想将ratingComment字段转换为数组类型字段。所以我这样做了:

db.getCollection('ratingsAndReview').find({}).forEach(function(doc){doc.ratingComment=[doc.ratingComment];db.ratingsAndReview.save(doc);})

查询之后,我注意到某些文档仍然具有旧结构,并且ratingComment字段不是数组。

因此,现在它们是上述结构和以下结构的混合:

{
    "_id" : ObjectId(abcd),
    "ratingComment" : [
        {
            "_id" : NumberLong(1000),
            "comment" : "Test comment"
        }
    ]
}


然后,我想检索所有具有reviewComment:{$type:3}的文档,但是此查询db.ratingsAndReview.find({ratingComment:{$type:3}})返回两种类型的文档。

问题是,将给我所有旧格式文件的查询是什么?

最佳答案

尝试使用dot notation进行查询,以从零开始的索引位置指定或访问数组的元素,如下所示:

db.ratingsAndReview.find({ "ratingComment.0": { "$exists": false } })


这将在集合中查询ratingComment字段不是数组的文档,这是因为它没有任何元素作为数组。

07-25 22:51