Arrays Mongodb查询以查找字段中嵌套数组或对象的元素值类型
我有一个mongodb数据模型,其中有一些数组字段包含嵌入的对象或数组。由于我调整了我的应用程序逻辑,我在讨论的领域中有一些不一致之处。最初,我的模型是这样的: 结果收集的初始设置Arrays Mongodb查询以查找字段中嵌套数组或对象的元素值类型,arrays,mongodb,object,types,Arrays,Mongodb,Object,Types,我有一个mongodb数据模型,其中有一些数组字段包含嵌入的对象或数组。由于我调整了我的应用程序逻辑,我在讨论的领域中有一些不一致之处。最初,我的模型是这样的: 结果收集的初始设置 "competition" : "competition1", "stats" : [ { "stat1" : [], "stat2" : [] } ] "competition" : "competition1", "stats" : [ {
"competition" : "competition1",
"stats" : [
{
"stat1" : [],
"stat2" : []
}
]
"competition" : "competition1",
"stats" : [
{
"stat1" : 3,
"stat2" : 2
}
]
然而,我发现这并不是满足我需求的最佳设置。因此,我将其更改为以下内容:
结果收集的新设置
"competition" : "competition1",
"stats" : [
{
"stat1" : [],
"stat2" : []
}
]
"competition" : "competition1",
"stats" : [
{
"stat1" : 3,
"stat2" : 2
}
]
我现在的问题是,具有初始设置的文档会导致错误。所以我想要的是找到所有具有初始设置的文档,并将它们转换为具有新设置
我如何在mongodb中实现这一点
这是我尝试过的,但我被卡住了
db.getCollection('results').find({"stats.0": { "$exists": true }})
但是我想要的是能够做一些像
db.getCollection('results').find({"stats.0".stat1: { "$type": Array}})
基本上,我希望获取stats[0]的值为array类型的文档,并将整个stats字段重写为空数组
这将修复我遇到的错误。旧版本中的数组运算符的工作原理与您可能认为的3.6中的略有不同
这将在3.6中起作用
db.getCollection('results').find( { "stats.0.stat1" : { $type: "array" } } )
对于较低版本,您可以通过两种方式来实现,这取决于您正在寻找什么
对于空数组,您只需检查
{"stats.0.stat1":{$size:0}}
对于非空数组
{"stats.0.stat1": {$elemMatch:{ "$exists": true }}}
使用$或
组合这两种方法以查找空数组和非空数组
对于您的用例,您可以使用下面的更新
db.getCollection('results').update({"stats.0.stat1":{$size:0}}, {$set:{"stats":[]}})