通过子json字段(mongosh)过滤mongo数据



假设我有一个mongo集合,看起来像这样:

{
_id: ...,
timestamp: '',
SomeStuff: {},
OriginalData: '{
"name": "Bob",
"age": 23,
'}
}

表示此集合中的一条记录。OriginalData字段中的所有内容都由转换为字符串的源json对象填充。其他所有内容都是某些标准化流程自动插入的内容(并且可以安全地假设始终存在)

是否有可能以一种方式过滤这个集合,我可以在OriginalData上操作子字段?

类似:

# Find all the records with people who are 20 years or older
mongosh> col.find({'OriginalData.age': {$gte: 20}})

我想基于数字子字段进行过滤,并考虑到可能一些原始数据字段可能不提供年龄字段。

您应该通过将其保存为文档而不是字符串来解决该问题。但是,同时你可以使用$function将其转换为文档,然后对其进行过滤。

db.col.aggregate([
{
$addFields: {
newField: {
$function:{
body: function(OriginalData) {  //js function that parses the string and returns document
return JSON.parse(OriginalData)
},
args: ["$OriginalData"],    //string field is the argument to the js function
lang: "js"
}
}
}
},
{
$match: {"newField.age": {$gte: 20}}
}
])

最新更新