Что не так с моим синтаксисом, чтобы вставить JSON в существующий массив?Нажать JSON в существующий синтаксис массива некорректно - MongoDB
> db.accounts.update({"accounts.username":"gattra"},{$push:{logbooks:[{firstLogbook:{"date":"Aug 24, 2015","location":"Brunswick,ME"}}]}})
WriteResult({ "nMatched" : 0, "nUpserted" : 0, "nModified" : 0 })
Еще одна попытка:
> db.accounts.update(
{"accountInfo.username":"gattra"},
{ $addToSet: { 'logbooks.$.firstLogbook': toInsert } }
)
WriteResult({
"nMatched" : 0,
"nUpserted" : 0,
"nModified" : 0,
"writeError" : {
"code" : 16837,
"errmsg" : "The positional operator did not find the match needed from the query. Unexpanded update: logbooks.$.firstLogbook"
}
})
Похоже, это говорит, что не нашли никаких совпадений по моим критериям, но если вы посмотрите на документ ниже вы можете увидеть, что есть учетная запись с имя пользователя «gattra».
Я новичок в MongoDB, и я не совсем понимаю документацию по веб-сайтам.
Документ, содержащий массив:
> db.accounts.find().pretty()
{
"_id" : ObjectId("55d6450dd745a23c6cfa2b23"),
"accountInfo" : {
"username" : "gattra",
"password" : "PASS",
"userid" : 1111
},
"logbooks" : [
{
"firstLogbook" : [
{
"date" : "August 10, 2015",
"location" : "Portland, ME",
"routeName" : "Trendsetter",
"grade" : "V10",
"type" : "Bouldering",
"time" : "4:30.05",
"pcl" : 10,
"notes" : "My first V10 ever!",
"photoUrl" : ""
}
]
}
]
}
EDIT: Исправленная версия Благодаря @Allen Чоу за помощь.
Я в конечном итоге восстановления коллекции счетов выглядеть следующим образом:
{
"accountInfo":{
"username":"broderick",
"password":"PASS",
"userid":1111
},
"logbooks":
[{
"firstLogbook": {
"id":1234,
"info":[{
"date":"August 10, 2015",
"location":"Portland, ME",
"routeName":"Trendsetter",
"grade":"V10",
"type":"Bouldering",
"time": "4:30.05",
"pcl":10,
"notes":"My first V10 ever!",
"photoUrl":""
}]
}
}]
}
Добавляя "id"
поле я могу использовать идентификатор в качестве параметра с конкретным указанием. Затем я поместил содержимое в поле "info"
.
Рабочий запрос:
> db.accounts.update({"accountInfo.username": "broderick", "logbooks.firstLogbook.id":1234},{$push:{"logbooks.$.firstLogbook.info":{"date":"Aug 24, 2015"}}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
это сработало, спасибо! Вопрос: мне нужен этот параметр журнала в первом наборе скобок с '{" accountInfo.username ":" gattra "," logbooks.firstLogbook.pcl ": 10}'? Думаю, мне интересно, почему мне нужно специфицировать другой JSON-объект, если единственное, что имеет значение, это то, что я хочу, чтобы этот новый объект JSON был вставлен в список «firstLogbook» – broderickga
, чтобы расширить его, теперь я вижу, что, по сути, что происходит Я задаю массив для обновления. Но нужно ли включать поле и значение объекта в этот массив? Или я могу просто сказать что-то вроде '' logbooks.firstLogbook'', без каких-либо значений? – broderickga
hmm okay, так что это звучит как на интерфейсе, когда пользователь вводит новую запись в журнал, мне нужно будет зацепить поле и значение из другой записи журнала и использовать его для соответствия массиву – broderickga