Рассмотрите пример MongoDB zip codes aggregationdata set. Каждый документ в коллекции выглядит следующим образом:Как преобразовать коллекцию MongoDB в объект, привязанный к значению элемента?
{
"_id": "10280",
"city": "NEW YORK",
"state": "NY",
"pop": 5574,
"loc": [
-74.016323,
40.710537
]
}
Как превратить коллекцию в объект, где каждый ключ является значением поля и каждое значение является объектом в коллекции?
Например, данные два документа
{ "_id" : "01001", "city" : "AGAWAM", "loc" : [ -72.622739, 42.070206 ], "pop" : 15338, "state" : "MA" }
{ "_id" : "01002", "city" : "CUSHMAN", "loc" : [ -72.51564999999999, 42.377017 ], "pop" : 36963, "state" : "MA" }
как я трансформировать их в единый документ
{
"01001": { "_id" : "01001", "city" : "AGAWAM", "loc" : [ -72.622739, 42.070206 ], "pop" : 15338, "state" : "MA" },
"01002": { "_id" : "01002", "city" : "CUSHMAN", "loc" : [ -72.51564999999999, 42.377017 ], "pop" : 36963, "state" : "MA" }
}
?
Я пытаюсь выполнить команду оболочки MongoDB db.zips.aggregate({$project: { "$_id":"$$CURRENT"}}).pretty()
, и я получаю сообщение об ошибке $expressions are not allowed at the top-level of $project
.
Я также попытался с помощью MapReduce с помощью команды db.zips.mapReduce(function(){emit(this._id, this)},function(k,v){}, {out:"stuffs"})
но что, не удивительно, что только производит (с db.stuffs.find()
)
{ "_id" : "01001", "value" : { "_id" : "01001", "city" : "AGAWAM", "loc" : [ -72.622739, 42.070206 ], "pop" : 15338, "state" : "MA" } }
{ "_id" : "01002", "value" : { "_id" : "01002", "city" : "CUSHMAN", "loc" : [ -72.51565, 42.377017 ], "pop" : 36963, "state" : "MA" } }
Спасибо, @chridam. Я искал способ только для запросов, без курсора. Я должен был быть более конкретным в моем вопросе. –
@MatthewAdams, пожалуйста, используйте [$ unwind] (https://docs.mongodb.com/manual/reference/operator/aggregation/unwind/) –