在Mongo-db中给出数组内第一个属性的值后,查询第二个属性的取值



我是Mongo的新手。

我需要从集合中的复杂文档构建查询。

{ "_id" : "http://nsgfds.com",
"has Title" : [
{
"title" : {
"language" : "eng",
"value" : "eng title"
},
"origin" : "https://Ignore",
"score" : 7.5
},
{
"title" : {
"language" : "chi",
"value" : "Chinese title"
},
"origin" : "https://Ignore",
"score" : 7.5
},
{
"title" : {
"language" : "vie",
"value" : "Vietnamese title"
},
"origin" : "https://Ignore",
"score" : 7.5
},
{
"title" : {
"language" : "asm",
"value" : "Assamese title"
},
"origin" : "https://Ignore",
"score" : 7.5
}
]
}

我的查询想要返回"的值;值";字段when";语言;以及"_id";给定的值

假设当我给出"_id";以及";语言;查询应该只返回"0"的值;值";字段基于"_id";以及";语言";。我的查询:

db.collectionname.aggregate([
{$match: {"_id": "http://nsgfds.com"}},
{  
$project: {
hasTitle: {
$filter: {
input: "$hasTitle", 
as:"item", 
cond: { $eq: ["$title.language:eng", "$$item.value"]}
}
}
}
}
]).pretty();

预期输出:

{
"_id" : "http://nsgfds.com",
"hasTitle" : [{"title" : {"value" : "Wiley Title English title"}]
};

实际输出:

{
"_id" : "http://nsgfds.com",
"hasTitle" : [
{
"title" : {
"language" : "eng",
"value" : "Wiley Title English title"
},
"origin" : "https://Ignore",
"score" : 7.5
},
{
"title" : {
"language" : "chi",
"value" : "chinese title"
},
"origin" : "https://Ignore",
"score" : 7.5
},
{
"title" : {
"language" : "vie",
"value" : "Vietnamese title"
},
"origin" : "https://Ignore",
"score" : 7.5
},
{
"title" : {
"language" : "asm",
"value" : "Assamese title"
},
"origin" : "https://Ignore",
"score" : 7.5
}
]
}

错误来自您的条件,您应该将列表中的元素($$item(与字符串(eng,asm,shi…(进行比较

{
$eq: [
"$$item.title.language",
"eng"
]
}

但这会给你:

[
{
"_id": "http://nsgfds.com",
"hasTitle": [
{
"origin": "https://Ignore",
"score": 7.5,
"title": {
"language": "eng",
"value": "eng title"
}
}
]
}
]

要获得所需输出,您需要另一个$project

{
$project: {
"hasTitle.title.value": "$hasTitle.title.value"
}
}

结果:

[
{
"_id": "http://nsgfds.com",
"hasTitle": [
{
"title": {
"value": [
"eng title"
]
}
}
]
}
]

最新更新