gpt4 book ai didi

java - 蒙戈 : $type is not working in mongo find query

转载 作者:行者123 更新时间:2023-11-30 02:40:07 26 4
gpt4 key购买 nike

我的 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 }}) 返回两种类型的文档。

问题是,为我提供所有旧格式文档的查询是什么?

最佳答案

根据$type的文档

Arrays

When applied to arrays, $type matches any inner element that is of the specified type. Without projection this means that the entire array will match if any element has the right type. With projection, the results will include just those elements of the requested type.

所以基本上它不检查数组字段的类型,它检查数组字段内值的类型,并且由于数组内部存在对象,它也返回包含数组字段的文档。

你可以尝试类似的事情

db.ratingsAndReview.find({ratingComment:{$not:{$type:4}}})

或者如 $type 文档示例中所示

db.ratingsAndReview.find( { $where : "!Array.isArray(this.ratingComment)" } );

关于java - 蒙戈 : $type is not working in mongo find query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42003863/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com