Blu*_*rie 5 mongodb mongodb-query aggregation-framework
我是 MongoDB 的新手,我想问一下如何为元素创建一个新字段,它表示该元素中另一个字段的大小。例如: - 我有这样的元素:
{
"_id" : ObjectId("57e1ffcb94d9ae534869c6cd"),
"url" : "http://www.nytimes.com",
"verticals" : [ 1, 2, 3, 4, 5, 12 ]
}
Run Code Online (Sandbox Code Playgroud)
我想添加新字段“numadx”,它是“verticals”数组的大小,在这种情况下,它是 6。结果可以是:
{
"_id" : ObjectId("57e1ffcb94d9ae534869c6cd"),
"url" : "http://www.nytimes.com",
"verticals" : [ 1, 2, 3, 4, 5, 12 ]
"numadx" : 6
}
Run Code Online (Sandbox Code Playgroud)
我在终端中使用命令:
db.test.update({},{$set:{numadx:{$size: "$verticals"}}},{multi:true})
Run Code Online (Sandbox Code Playgroud)
但它返回错误:
"errmsg" : "'numadx.$size' 中以美元 ($) 为前缀的字段 '$size' 对存储无效。"
有人可以帮我 :D 吗?我这样做是为了根据 numadx 字段对集合中的元素进行排序,这有助于我了解集合中这些元素的最少到最多数量的垂直值。
非常感谢。
kev*_*adi -1
目前,在 MongoDB 中,您无法使用文档中的某些计算值来更新文档。此外,Bob 是正确的,他$size不是该update()命令识别的操作员。
话虽如此,有一种方法可以使用mongoshell 脚本来实现您想要的目的:
db.test.find().forEach(function(doc){
db.test.update({_id:doc._id}, {$set:{numadx:doc.verticals.length}})
})
Run Code Online (Sandbox Code Playgroud)
该脚本将进入集合中的每个文档,并numadx使用变量中可访问的当前文档的值设置字段doc。
您可以修改find()其中的查询以仅处理数据的子集,否则它将针对集合中的每个文档运行。
欲了解更多信息,请参阅:
| 归档时间: |
|
| 查看次数: |
1344 次 |
| 最近记录: |