2014-02-07 3 views
-1

Можно ли добавить key:value в указатель MongoDB?Как добавить ключ: значение к курсору MongoDB?

Я попытался это:

cursor = collection.find(query,projection) 
cursor['my_message'] = "value here" # trying to add key:value here 

Но это не похоже на работу (500).

Более контекст, это работает:

dbname = 'my_db' 
db = connection[dbname] 
collection = db.my_collection 
query = {'key_1': my_var} 
projection = {'key_2':1} 
cursor = collection.find(query,projection) 
response.content_type = 'application/json' 
return dumps(cursor) 

Это не:

dbname = 'my_db' 
db = connection[dbname] 
collection = db.my_collection 
query = {'key_1': my_var} 
projection = {'key_2':1} 
cursor = collection.find(query,projection) 
cursor['my_message'] = "value here" # trying to add key:value here 
response.content_type = 'application/json' 
return dumps(cursor) 

Edit: И только визуализировать то, что возвращается успешно (без приложенного значения), это что-то вроде:

[{ document_1 },{ document_2 },{ document_3 }] 

И я ожидаю этого смотреть что-то вроде:

["my_message":"value here",{ document_1 },{ document_2 },{ document_3 }] 

Edit: Я попробовал следующее в качестве альтернативы, а также получил 500.

entries = [] 
cursor = collection.find(query,projection) 
for entry in cursor: 
    entries.append(entry) 
entries['my_message'] = "value here" 
response.content_type = 'application/json' 
return dumps(entries) 
+2

Почему бы просто не разбить его на 2: 'result = {my_message: 'значение здесь', data: cursor}'? – WiredPrairie

+0

Это работает (с запятыми вокруг ключей), но это просто означает, что при итерации по массиву в интерфейсе вместо использования '. .ee (results ...', я использую '$ .each (results.data'. I 'd все еще интересно узнать, почему я не могу добавить прямо к курсору (что я предполагаю, это dict?). – user1063287

+0

Записи - это список, а не хеш - поэтому он возвращает список, когда вы называете 'dumps 'Я предполагаю, что это не включило бы в список ключевое значение, которое вы положили на объект во время выполнения. – WiredPrairie

ответ

1

Действительно, WiredPrarie ответил на это для вас в самом начале, и все говорит то же самое.

Мы знаем, что вы хотите делать. Вы хотите, чтобы ваш сериализованный ответ был отправлен обратно с некоторой информацией, которую вы хотите вставить, а затем с помощью набора результатов. Я также предполагаю, что вы хотите использовать эти результаты и свои другие данные, вероятно, загруженные в какой-либо магазин обработки JavaScript.

Я никогда не видел ничего, что не ожидал какой-то структуры, как:

{ 
    "result": "ok", 
    "meta": [{ akey: "avalue"}, {bkey: "bvalue"}], 

    "results:[    // this is your 'entries' value here 
     { document_1 }, 
     { document_2 }, 
     { document_3 }, 
     .... 

Так что все говорят, это встраивать ваш entries в другую структуру, что вы собираетесь сериализовать и вернуться. Путем нажатия других ключей в список entries вы делаете это неправильно.

Смежные вопросы