我有这个系列
{
"name" : "users",
"value" : [
"foo",
"bar",
"buz"
]
}
{
"name" : "languages",
"value" : [
"fr",
"en",
"jp"
]
}
我想检索两个值的数组并返回类似这样的内容
{
valueUser['foo','bar','buz'],
languages['fr','en','jp'],
}
我要做两个查询?或者我可以做一个查询吗?
答案 0 :(得分:1)
更多地使用聚合,但这非常复杂。所以最好每个阶段都要看看发生了什么。
db.collection.aggregate([
{ "$project": {
"valueUser": { "$cond": [
{ "$eq": [ "$name", "users" ] },
"$value",
[false]
]},
"languages": { "$cond": [
{ "$eq": [ "$name", "languages" ] },
"$value",
[false]
]}
}},
{ "$unwind": "$valueUser" },
{ "$unwind": "$languages" },
{ "$group": {
"_id": null,
"valueUser": { "$push": "$valueUser" },
"languages": { "$push": "$languages" }
}},
{ "$unwind": "$valueUser" },
{ "$match": { "valueUser": { "$ne": false } } },
{ "$group": {
"_id": "$languages",
"valueUser": { "$push": "$valueUser" }
}},
{ "$unwind": "$_id" },
{ "$match": { "_id": { "$ne": false } } },
{ "$group": {
"_id": "$valueUser",
"languages": { "$push": "$_id" }
}},
{ "$project": {
"_id": 0,
"valueUser": "$_id",
"languages": 1
}}
])
这样就可以为您提供如何到"拆分"的基本概念。文件中的字段。
可能在这里你需要考虑你的用例,因为这个过程非常复杂。
答案 1 :(得分:0)
您无法在示例中获得您想要的结果。但是你可以在一个查询中获取数据 这样:
db.collection.find({}, {name : true, value : true, _id : false})
结果将是:
[
{ "name" : "users", "value" : [ "foo", "bar", "buz" ] }
{ "name" : "languages", "value" : [ "fr", "en", "jp" ] }
]
认为这会对你有所帮助。
答案 2 :(得分:0)
您希望使用聚合框架来包含所有文档中的值:
db.col.aggregate([
{ $group: { _id: "$name", values: { $addToSet: "$value" } } },
{ $project : { _id: 0, name: "$_id", values: 1 }}
])
对于这样的集合:
{"name" : "users", "value" : ["foo", "bar", "buz"]},
{"name" : "users", "value" : ["bif", "bar", "nerf"]},
{"name" : "languages", "value" : [ "fr", "en", "jp"]}
结果就是这样。
[
{ "name" : "users", "value" : [ "foo", "bar", "buz", "bif", "nerf" ] }
{ "name" : "languages", "value" : [ "fr", "en", "jp" ] }
]
答案 3 :(得分:0)
您可以使用
获取与用户和语言相对应的数据 db.collection.find({},{_id:0})
结果将是
[
{ "name" : "users", "value" : [ "foo", "bar", "buz" ] }
{ "name" : "languages", "value" : [ "fr", "en", "jp" ] }
]
如果您想要检索问题中提到的方式,那么您需要以这种方式插入
db.collection.insert({"name":"users", "valueUser":["foo","bar","buz"]}
db.collection.insert({"name":"languages", "valueLanguages":["fr","en","jp"]})
然后像这样检索数据
db.collection.find({},{_id:0,name:0})
结果将是
{ "valueUser" : [ "foo" , "bar" , "buzz" ] }
{ "valueLanguages" : [ "fr" , "en" , "jp" ] }