我有一个这样的MongoDB结构。
[
{
_id: 1,
data: [
{ price : "2", title: "title-1" }
]
},
{
_id: 2,
data: [
{ price : "2.0", title: "title-2" }
]
},
{
_id: 3,
data: [
{ price : "2.00", title: "title-3" },
{ price : "2.99", title: "title-4" }
]
}我想写一个查询,我可以在其中引入价格值等于2(Number Type)的所有标题。但问题是,价格字段的类型是字符串。当我要查询时,我必须为价格设置各种条件,比如:
db.collection("test").find({ '$or': ["'data.price": '2'}, {"data.price": '2.0'}, {"data.price": '2.00'}] })在MongoDB中,有没有一种方法可以让我们在查询之前转换一个类型?或者有没有一种更好的方式来写上面的查询?
发布于 2021-09-17 08:36:38
理想情况下,您应该验证集合的输入参数,以便保持数据类型的一致性,尤其是将数值数据保存为数字而不是字符串。
如果您想在查询之前转换现有项,则需要结合使用$map和$toDouble。在这样的转换之后,您可以运行您的查询:
db.collection.aggregate([
{
$project: {
data: {
$map: {
input: "$data",
in: {
$mergeObjects: [
"$$this",
{ price: { $toDouble: "$$this.price" } }
]
}
}
}
}
},
{
$match: { "data.price": 2 }
}
])https://stackoverflow.com/questions/69220121
复制相似问题