2015-05-09 2 views
0

Я извлечения данных JSON из API и это короткий пример этого:Вставка переменной в качестве ключа в MongoDB

{"hatenames": 
    {"id":6239, 
    "name":"hatenames", 
    "stat1":659, 
    "stat2":30, 
    "stat3":1414693 
    } 
} 

Я пытаюсь вставить его в MongoDB (используя MongoClient) но он не позволит мне напрямую разместить объект или использовать переменную в качестве имени поля. Если я положу имя пользователя var, он просто выведет его как имя пользователя в поле базы данных. Это то, что я хотел бы работать:

collection.insert({object} 
collection.insert({username:object[username]} 

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

+0

Что вы используете для вставки данных в mongoDB, mongoose или MongoClient? –

+0

MongoClient, извините за отсутствие указаний –

+0

Когда вы выполните: console.log (hatenames ['id']), можете ли вы получить 6239? –

ответ

1

Прежде всего, будучи программистом, вы должны забыть о фразе «это не работает». Вы должны описать, как он не работает с точными сообщениями об ошибках, с которыми вы сталкиваетесь. Не к вашей проблеме.

Просто потому, что я могу легко сделать

db.coll.insert({"hatenames": 
    {"id":6239, 
    "name":"hatenames", 
    "stat1":659, 
    "stat2":30, 
    "stat3":1414693 
    } 
}) 

или var a = {"hatenames":{"id":6239, "name":"hatenames", "stat1":659, "stat2":30, "stat3":1414693}}; и db.coll.insert(a),

Я думаю, что проблема заключается в том, что ваш объект не является на самом деле объект, но строку. Поэтому я подозреваю, что у вас есть строка, возвращаемая вам из этого API. Что-то вроде '{"hatenames":{...}', и это вызвало проблему при попытке сохранить или получить доступ к свойствам. Поэтому попробуйте преобразовать его в JSON.

+0

Спасибо, что ответили, извините, если я не объясню это должным образом. Я на самом деле JSON.parse строку, как только я получаю ее от API. Проблема заключается в том, что 'db.coll.insert (a)' не будет работать, он не позволит мне вводить только один объект var/object/thing, это даст мне ошибку, заставляющую меня делать что-то вроде 'db. coll.insert (a: b) ', заставляя меня вводить ключ, а не значение, надеюсь, что это имеет смысл? В то же время ключ не может быть переменной, если я делаю 'db.coll.insert (a: a)' ключ будет буквально «а», а значением будет тот объект, который вы создали, но в разделе « a 'тем не менее –

+0

@HateNames, можете ли вы рассказать мне, какую ошибку вы видите, когда вы делаете 'db.coll.insert (a)' –

+0

Вау, я так отставлен. Я сразу заметил, когда прочитал ошибку, чтобы скопировать ее для вас, хотя я делал это ранее, много раз, но пропустил очевидную часть. Я скопировал предыдущий код из вставки и делал 'db.coll.insert ({a})' вместо 'db.coll.insert (a)' .. В какой-то пустой трате времени мне очень жаль беспокоить вас, ребята. Я так рад, что ты принципиально знал, как это работает, еще раз спасибо. –

1

Попробуйте сделать это:

MongoClient.connect('mongodb://127.0.0.1:27017/db_name', function(err, db) { 
    if(err) throw err; 

    someCollection = db.collection('some_collection'); 
}); 

someCollection.insert({ 
    name: hatenames['name'] 
}); 

EDIT

для динамического подхода, я хотел бы предложить вам сыграть aroung этого function:

Object.keys(hatenames) 

эта функция будет возвращать ключи в массиве ,

EDIT 2

Я создал ссылку: Insert json file into mongodb using a variable

Посмотреть, если это помогает.

+0

Это будет работайте наверняка, но я уже знал, что могу добавить их так и просто: 'id: hatenames ['id'], name: hatenames ['name'], stat1: hatenames ['stat1']' etc, проблема это JSON является кратким примером реального, некоторые из них имеют более 50 значений, и это было бы безумно делать один за другим, как это, –

+0

Итак, вы хотите больше динамического подхода? –

+0

Мне понравилось бы что-то, что работает, но предпочтительнее не добавлять всю вещь, а затем возвращаться, чтобы обновить имя поля/ключа, если возможно –

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