2017-04-22 52 views
2

我有这样的MongoDB中:如何检索对象内的不同的键MongoDB中

{ "_id" : ObjectId("58fb35531eb5df245d5d434f"), "name" : "d1.html", "indexation" : { "Citroen" : 1, "color" : 1, "Marca" : 1, "rojo" : 1 } } 
{ "_id" : ObjectId("58fb35531eb5df245d5d4350"), "name" : "d2.html", "indexation" : { "blancos" : 1, "ocasión" : 1, "Madrid" : 1, "Coches" : 1, "rojo" : 1, "coches" : 1 } } 
{ "_id" : ObjectId("58fb35531eb5df245d5d4351"), "name" : "d3.html", "indexation" : { "rojos" : 1, "Ocasión" : 1, "marcas" : 1, "Madrid" : 1, "blancas" : 1, "autos" : 1, "de" : 1 } } 

你可以看到包含上述的图像:Content

而且我想进去的区别键每个文档中的对象“索引”。 我想得到的结果是:["Citroen", "color", "Marca", "rojo", "blancos", "ocasión", "Madrid", "Coches", "coches", "rojos", "Ocasión", "marcas", "blancas" "autos", "de"]

我与不同的(“指数化”)尝试,但我得到了整个指数...

你能不能给我什么我必须做的得到我想要解释什么,好吗?

回答

1

可以在3.4.4版本使用新的$objectToArrray所有关键&值对到文档数组转换遵循由$unwind & $group$addToSet得到不同的键

db.collection.aggregate([{$project: {indexation: {$objectToArray: "$indexation"}}}, {$unwind:"$indexation"}, {$group:{_id:null, keys:{$addToSet:"$indexation.k"}}}]) 

对于较低的版本,你已经更新到indexation看起来像下面,并使用

db.collection.distinct("indexation.k")

{ "_id" : ObjectId("58fb35531eb5df245d5d434f"), "name" : "d1.html", "indexation" : [{ "k" : "Citroen", "v" : 1 }, { "k" : "Marca", "v" : 1 }]} 
+0

如何修改'indexation'使其看起来像'[{“k”:“雪铁龙”,“v”:1},{“k”:“Marca”,“v”:1}] '? @Veeram – Carlos

+0

其两部分变化。从对象转换为数组和批量更新(取决于文档的数量)或简单的迭代。使用http://stackoverflow.com/questions/38824349/convert-object-to-array-in-javascript进行转换并使用http://stackoverflow.com/questions/33530357/loop-through-mongo-collection-and-更新每个文档中的字段/批量上传。 – Veeram