Mongodb 项目匹配数组中的字段值
我想更改文档结构,只在Mongodb 项目匹配数组中的字段值,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我想更改文档结构,只在definition数组中显示与文档中idLanguage匹配的定义。我该怎么做 具有由3个元素组成的定义数组(三个不同id的idLanguage)的文档示例: 您可以使用和来匹配这些值。前面的问题表明您至少在使用MongoDB 3.4,所以这应该不是问题: db.collection.aggregate([ { "$addFields": { "definition": { "$arrayElemAt": [ "$definitio
definition
数组中显示与文档中idLanguage
匹配的定义。我该怎么做
具有由3个元素组成的定义
数组(三个不同id的idLanguage
)的文档示例:
您可以使用和来匹配这些值。前面的问题表明您至少在使用MongoDB 3.4,所以这应该不是问题:
db.collection.aggregate([
{ "$addFields": {
"definition": {
"$arrayElemAt": [
"$definition.definition",
{ "$indexOfArray": [
"$definition.idLanguage",
"$idLanguage"
}}
]
}
}}
])
通过
idLanguage
的匹配位置处的定义“
(字段)从数组中提取。因此,您将使用这些属性之间匹配的单数值替换“数组”。如果正确理解您的问题,您可能需要使用该值
db.collection.aggregate([
{
$project: {
reference: 1,
defination: {
$filter: {
input: "$definition",
as: "elem",
cond: {$eq: ["$$elem.idLanguage", "0161-1#LG-000001#1"]}
// instead of "0161-1#LG-000001#1" you can use your variable
}
}
}
}
])
或仅返回定义。定义
db.collection.aggregate([
{"$unwind": "$definition"},
{"$match": {"definition.idLanguage": "0161-1#LG-000001#1"}},
{
$group: {
_id: "$_id",
defination: {$push: "$definition.definition"}
}
}
])
请求
idLanguage
与定义进行比较。idLanguage
?@ShaishabRoy正确。谢谢你的回复!
db.collection.aggregate([
{"$unwind": "$definition"},
{"$match": {"definition.idLanguage": "0161-1#LG-000001#1"}},
{
$group: {
_id: "$_id",
defination: {$push: "$definition.definition"}
}
}
])