我是mongodb的新手并且还在学习它,所以我的问题可能很幼稚,所以请耐心等待:) 我在mongodb中只有一个json对象,看起来像这样。
json对象
{
"URLStore": [
{
"description": "adf description",
"url": "www.adf.com"
},
{
"description": "pqr description",
"url": "www.pqr.com"
},
{
"description": "adf description",
"url": "www.adf.com"
}
]
}
我需要查询与给定输入匹配的url的描述。例如www.adf.com。我有一个查询mongodb的代码
mongodb查询
BasicDBObject whereQuery = new BasicDBObject();
whereQuery.put("URLStore.url","www.pqr.com");
BasicDBObject fields=new BasicDBObject("URLStore.description", "");
cursor = collection.find(whereQuery,fields);
但结果类似于
{ "_id": { "$oid": "554b4046e4b072dd9deaf277" }, "URLStore": [ { "description": "pqr description" }, { "description": "adf description" }, { "description": "adf description" } ] }
实际上只有1个描述应该已经返回,因为匹配的对象与关键的www.pqr.com只有一个。我的查询有什么问题?我在这里遗漏了什么?
我已经尝试过问题Retrieve only the queried element in an object array in MongoDB collection,但使用提到的解决方案只会返回一个对象/第一个匹配
答案 0 :(得分:3)
使用以下聚合管道,应该能够提供所需的结果:
db.collection.aggregate([
{
"$match": {
"URLStore.url": "www.adf.com"
}
},
{
"$unwind": "$URLStore"
},
{
"$match": {
"URLStore.url": "www.adf.com"
}
},
{
"$group": {
"_id": {
"url": "$URLStore.url",
"description": "$URLStore.description"
}
}
},
{
"$project": {
"_id": 0,
"description": "$_id.description"
}
}
])