我是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"
]
}
}
]
}
]