Mongodb 根据主文档中的值,仅从子文档中检索某些字段
我的mongodb中有一个收藏,如下所示Mongodb 根据主文档中的值,仅从子文档中检索某些字段,mongodb,Mongodb,我的mongodb中有一个收藏,如下所示 { _id: ObjectId("5fa917baffdd553806e96ca4"), priority: 1, fields: { 1: { id: NumberInt("1"), value: NumberInt("1"), label: "Din 1", dimension: null,
{
_id: ObjectId("5fa917baffdd553806e96ca4"),
priority: 1,
fields: {
1: {
id: NumberInt("1"),
value: NumberInt("1"),
label: "Din 1",
dimension: null,
valueHuman: "1"
},
9: {
id: NumberInt("9"),
value: NumberInt("259"),
label: "",
dimension: "",
valueHuman: ""
}
}
}
我要做的是根据优先级的值获取字段
就像我应该得到的那样
{
_id: ObjectId("5fa917baffdd553806e96ca4"),
priority: 1,
fields: {
1: {
id: NumberInt("1"),
value: NumberInt("1"),
label: "Din 1",
dimension: null,
valueHuman: "1"
}
}
}
将$objectToArray
对象转换为数组字段
迭代上述转换字段数组的循环并检查字段是否匹配,$filter
将字符串数转换为整数$toInt
返回以将数组转换为对象$arrayToObject
sir$$this.k does$objectToArray将对象转换为k(键)和v(值)格式,如
[{k:“1”,v:“ABC”…}]
和$$this表示$filter/或临时变量的当前实例,如果您想访问k,如果我想用$$this来表示某个值,因为在我的realdatabase中,字段的子文档列是io1 ETC无法准确获取您能否提供实际和预期的文档。先生,请检查我的Edied问题我没有针对列的字符串,但有一个对象
db.collection.aggregate([
{
$addFields: {
fields: {
$arrayToObject: {
$filter: {
input: { $objectToArray: "$fields" },
cond: {
$eq: [{ $toInt: "$$this.k" }, "$priority"]
}
}
}
}
}
}
])