mongodb - MongoDB中的项目删除文档中的一个级别
问题描述
我有一个集合,其中包含这样的文档:
{
_id: "Id",
foo: {
variable1: {
value: "value1"
},
variable2: {
value: "value2"
}
}
}
Wherevariable
可以有不同的值,我正在尝试使用 mongo 查询来获得类似的东西
[
{
_id: "Id",
values: [
"value1", "value2"
]
}
]
可能吗?我不确定我是否可以通过聚合来做到这一点......
解决方案
您将能够通过一个简单的聚合查询来实现这一点,该查询将对象投影到一个数组中,然后根据文档 ID 对其进行重新分组。
db.test.aggregate([
{
$project: {
values: { $objectToArray: "$foo" }
}
},
{
$unwind: "$values",
},
{
$group : { _id: "$_id", values: { $push: "$values.v.value" } }
}
]);
以上将输出以下内容
{ "_id" : "Id", "values" : [ "value1", "value2" ] }
更新:
正如 mickl 在 commets 中所说,您还可以使用$map
来投射$project
舞台内的所有值。
db.test.aggregate([
{
$project: {
values: {
$map: {
input: { $objectToArray: "$foo" },
as: "val",
in: "$$val.v.value"
}
}
}
}
]);
这也会输出
{ "_id" : "Id", "values" : [ "value1", "value2" ] }
推荐阅读
- r - 无法加载拨浪鼓。每次它显示 R 会话中止,致命错误(附截图) - Mac BigSur
- android - 如何根据用户选择从房间数据库中获取和显示特定结果(android studio)
- jenkins - Jenkins 错误:“未知阶段部分“阶段”。从版本 0.5 开始,阶段中的步骤必须位于“步骤”块中
- c++ - 在 STARTLS 之后我应该发送什么?
- python - 产品销售的 Python 动态规划
- python - 是否可以同时使用 Python 2 和 Python 3 创建 PubSub 设置?
- r - 从 dply 链中的 lm 中提取 R^2,而不是 attributes(mylm)$adj.rsquared
- python - 文件中的行作为函数的单独字符串
- c++ - 从给定字符串中删除重复项(不对其进行排序)
- shell - 管道'|' 我的 ansible 脚本似乎不喜欢