MongoDB
В качестве идентификатора используется поле _id
(именно с подчеркиванием)
Для того чтобы войти в MongoShell, нужно ввести команду mongo
, также можно сразу указать имя базы mongo mydb
(это заменяет команду use mydb
)
Для того чтобы импортировать свою базу нужно выполнить следующую команду
~# mongoimport -v --file=zips.json
2019-11-12T16:05:10.757+0000 no collection specified
2019-11-12T16:05:10.758+0000 using filename 'zips' as collection
2019-11-12T16:05:10.760+0000 filesize: 3182409 bytes
2019-11-12T16:05:10.761+0000 using fields:
2019-11-12T16:05:10.781+0000 connected to: localhost
2019-11-12T16:05:10.782+0000 ns: test.zips
2019-11-12T16:05:10.782+0000 connected to node type: standalone
2019-11-12T16:05:10.784+0000 using write concern: w='1', j=false, fsync=false, wtimeout=0
2019-11-12T16:05:10.784+0000 using write concern: w='1', j=false, fsync=false, wtimeout=0
2019-11-12T16:05:11.758+0000 imported 29353 documents
Посмотреть список коллекций в базе
> use test
switched to db test
> show collections
zips
>
Поиск по базе
> db.zips.find({'_id': '01001'})
{ "_id" : "01001", "city" : "AGAWAM", "loc" : [ -72.622739, 42.070206 ], "pop" : 15338, "state" : "MA" }
>
Показать все документы в базе
> db.zips.find({})
{ "_id" : "01001", "city" : "AGAWAM", "loc" : [ -72.622739, 42.070206 ], "pop" : 15338, "state" : "MA" }
{ "_id" : "01002", "city" : "CUSHMAN", "loc" : [ -72.51565, 42.377017 ], "pop" : 36963, "state" : "MA" }
{ "_id" : "01005", "city" : "BARRE", "loc" : [ -72.108354, 42.409698 ], "pop" : 4546, "state" : "MA" }
{ "_id" : "01007", "city" : "BELCHERTOWN", "loc" : [ -72.410953, 42.275103 ], "pop" : 10579, "state" : "MA" }
{ "_id" : "01008", "city" : "BLANDFORD", "loc" : [ -72.936114, 42.182949 ], "pop" : 1240, "state" : "MA" }
{ "_id" : "01010", "city" : "BRIMFIELD", "loc" : [ -72.188455, 42.116543 ], "pop" : 3706, "state" : "MA" }
{ "_id" : "01011", "city" : "CHESTER", "loc" : [ -72.988761, 42.279421 ], "pop" : 1688, "state" : "MA" }
{ "_id" : "01012", "city" : "CHESTERFIELD", "loc" : [ -72.833309, 42.38167 ], "pop" : 177, "state" : "MA" }
{ "_id" : "01013", "city" : "CHICOPEE", "loc" : [ -72.607962, 42.162046 ], "pop" : 23396, "state" : "MA" }
{ "_id" : "01020", "city" : "CHICOPEE", "loc" : [ -72.576142, 42.176443 ], "pop" : 31495, "state" : "MA" }
{ "_id" : "01022", "city" : "WESTOVER AFB", "loc" : [ -72.558657, 42.196672 ], "pop" : 1764, "state" : "MA" }
{ "_id" : "01026", "city" : "CUMMINGTON", "loc" : [ -72.905767, 42.435296 ], "pop" : 1484, "state" : "MA" }
{ "_id" : "01027", "city" : "MOUNT TOM", "loc" : [ -72.679921, 42.264319 ], "pop" : 16864, "state" : "MA" }
{ "_id" : "01028", "city" : "EAST LONGMEADOW", "loc" : [ -72.505565, 42.067203 ], "pop" : 13367, "state" : "MA" }
{ "_id" : "01030", "city" : "FEEDING HILLS", "loc" : [ -72.675077, 42.07182 ], "pop" : 11985, "state" : "MA" }
{ "_id" : "01031", "city" : "GILBERTVILLE", "loc" : [ -72.198585, 42.332194 ], "pop" : 2385, "state" : "MA" }
{ "_id" : "01032", "city" : "GOSHEN", "loc" : [ -72.844092, 42.466234 ], "pop" : 122, "state" : "MA" }
{ "_id" : "01033", "city" : "GRANBY", "loc" : [ -72.520001, 42.255704 ], "pop" : 5526, "state" : "MA" }
{ "_id" : "01034", "city" : "TOLLAND", "loc" : [ -72.908793, 42.070234 ], "pop" : 1652, "state" : "MA" }
{ "_id" : "01035", "city" : "HADLEY", "loc" : [ -72.571499, 42.36062 ], "pop" : 4231, "state" : "MA" }
Type "it" for more
>
Показывает порциями, чтобы показать еще нужно набрать it
Поиск документов по условиям через И
> db.zips.find({'city':'GOSHEN','state':'MA'})
{ "_id" : "01032", "city" : "GOSHEN", "loc" : [ -72.844092, 42.466234 ], "pop" : 122, "state" : "MA" }
>
Через ИЛИ
> db.zips.find({$or: [{'city':'GOSHEN'},{'state':'MA'}]})
{ "_id" : "01001", "city" : "AGAWAM", "loc" : [ -72.622739, 42.070206 ], "pop" : 15338, "state" : "MA" }
{ "_id" : "01002", "city" : "CUSHMAN", "loc" : [ -72.51565, 42.377017 ], "pop" : 36963, "state" : "MA" }
{ "_id" : "01005", "city" : "BARRE", "loc" : [ -72.108354, 42.409698 ], "pop" : 4546, "state" : "MA" }
{ "_id" : "01007", "city" : "BELCHERTOWN", "loc" : [ -72.410953, 42.275103 ], "pop" : 10579, "state" : "MA" }
{ "_id" : "01008", "city" : "BLANDFORD", "loc" : [ -72.936114, 42.182949 ], "pop" : 1240, "state" : "MA" }
{ "_id" : "01010", "city" : "BRIMFIELD", "loc" : [ -72.188455, 42.116543 ], "pop" : 3706, "state" : "MA" }
{ "_id" : "01011", "city" : "CHESTER", "loc" : [ -72.988761, 42.279421 ], "pop" : 1688, "state" : "MA" }
{ "_id" : "01012", "city" : "CHESTERFIELD", "loc" : [ -72.833309, 42.38167 ], "pop" : 177, "state" : "MA" }
{ "_id" : "01013", "city" : "CHICOPEE", "loc" : [ -72.607962, 42.162046 ], "pop" : 23396, "state" : "MA" }
{ "_id" : "01020", "city" : "CHICOPEE", "loc" : [ -72.576142, 42.176443 ], "pop" : 31495, "state" : "MA" }
{ "_id" : "01022", "city" : "WESTOVER AFB", "loc" : [ -72.558657, 42.196672 ], "pop" : 1764, "state" : "MA" }
{ "_id" : "01026", "city" : "CUMMINGTON", "loc" : [ -72.905767, 42.435296 ], "pop" : 1484, "state" : "MA" }
{ "_id" : "01027", "city" : "MOUNT TOM", "loc" : [ -72.679921, 42.264319 ], "pop" : 16864, "state" : "MA" }
{ "_id" : "01028", "city" : "EAST LONGMEADOW", "loc" : [ -72.505565, 42.067203 ], "pop" : 13367, "state" : "MA" }
{ "_id" : "01030", "city" : "FEEDING HILLS", "loc" : [ -72.675077, 42.07182 ], "pop" : 11985, "state" : "MA" }
{ "_id" : "01031", "city" : "GILBERTVILLE", "loc" : [ -72.198585, 42.332194 ], "pop" : 2385, "state" : "MA" }
{ "_id" : "01032", "city" : "GOSHEN", "loc" : [ -72.844092, 42.466234 ], "pop" : 122, "state" : "MA" }
{ "_id" : "01033", "city" : "GRANBY", "loc" : [ -72.520001, 42.255704 ], "pop" : 5526, "state" : "MA" }
{ "_id" : "01034", "city" : "TOLLAND", "loc" : [ -72.908793, 42.070234 ], "pop" : 1652, "state" : "MA" }
{ "_id" : "01035", "city" : "HADLEY", "loc" : [ -72.571499, 42.36062 ], "pop" : 4231, "state" : "MA" }
Type "it" for more
>
То есть используется оператор $or
, далее в квадратных скобках идет список значений в фигурных скобках
Поиск документов, где одно поле равно либо одному значению либо другому
> db.zips.find({'city':{$in:['AGAWAM','CUSHMAN']}})
{ "_id" : "01001", "city" : "AGAWAM", "loc" : [ -72.622739, 42.070206 ], "pop" : 15338, "state" : "MA" }
{ "_id" : "01002", "city" : "CUSHMAN", "loc" : [ -72.51565, 42.377017 ], "pop" : 36963, "state" : "MA" }
{ "_id" : "72526", "city" : "CUSHMAN", "loc" : [ -91.776455, 35.869663 ], "pop" : 336, "state" : "AR" }
>
Проецирование (что отображать, а что нет (при поиске))
Отобразить только айди и город
> db.zips.find({'city':{$in:['AGAWAM','CUSHMAN']}},{'_id':1,'city':1})
{ "_id" : "01001", "city" : "AGAWAM" }
{ "_id" : "01002", "city" : "CUSHMAN" }
{ "_id" : "72526", "city" : "CUSHMAN" }
>
При этом если указать только city
> db.zips.find({'city':{$in:['AGAWAM','CUSHMAN']}},{'city':1})
{ "_id" : "01001", "city" : "AGAWAM" }
{ "_id" : "01002", "city" : "CUSHMAN" }
{ "_id" : "72526", "city" : "CUSHMAN" }
>
То id все равно отображается (поэтому можно указать "не отображать id")
> db.zips.find({'city':{$in:['AGAWAM','CUSHMAN']}},{'city':1,'_id':0})
{ "city" : "AGAWAM" }
{ "city" : "CUSHMAN" }
{ "city" : "CUSHMAN" }
>
Но это сработает только с id, потому что это особое поле, например следующий запрос будет с ошибкой (потому что при проецировании поля должны иметь одинаковые значения (1 или 0))
> db.zips.find({'city':{$in:['AGAWAM','CUSHMAN']}},{'city':1,'pop':0})
Error: error: {
"ok" : 0,
"errmsg" : "Projection cannot have a mix of inclusion and exclusion.",
"code" : 2,
"codeName" : "BadValue"
}
>
Сортировка
> db.zips.find().sort({'_id':-1})
{ "_id" : "99950", "city" : "KETCHIKAN", "loc" : [ -133.18479, 55.942471 ], "pop" : 422, "state" : "AK" }
{ "_id" : "99929", "city" : "WRANGELL", "loc" : [ -132.352918, 56.433524 ], "pop" : 2573, "state" : "AK" }
{ "_id" : "99927", "city" : "POINT BAKER", "loc" : [ -133.376372, 56.307858 ], "pop" : 426, "state" : "AK" }
{ "_id" : "99926", "city" : "METLAKATLA", "loc" : [ -131.579001, 55.121491 ], "pop" : 1469, "state" : "AK" }
{ "_id" : "99925", "city" : "KLAWOCK", "loc" : [ -133.055503, 55.552611 ], "pop" : 851, "state" : "AK" }
{ "_id" : "99923", "city" : "HYDER", "loc" : [ -130.124915, 55.925867 ], "pop" : 116, "state" : "AK" }
{ "_id" : "99922", "city" : "HYDABURG", "loc" : [ -132.633175, 55.137406 ], "pop" : 891, "state" : "AK" }
{ "_id" : "99921", "city" : "CRAIG", "loc" : [ -133.117081, 55.47317 ], "pop" : 1398, "state" : "AK" }
{ "_id" : "99919", "city" : "THORNE BAY", "loc" : [ -132.513815, 55.66086 ], "pop" : 744, "state" : "AK" }
{ "_id" : "99901", "city" : "KETCHIKAN", "loc" : [ -131.683175, 55.372028 ], "pop" : 13886, "state" : "AK" }
{ "_id" : "99840", "city" : "SKAGWAY", "loc" : [ -135.301794, 59.468471 ], "pop" : 692, "state" : "AK" }
{ "_id" : "99835", "city" : "SITKA", "loc" : [ -135.316569, 57.051436 ], "pop" : 8638, "state" : "AK" }
{ "_id" : "99833", "city" : "PETERSBURG", "loc" : [ -133.160683, 56.827134 ], "pop" : 4253, "state" : "AK" }
{ "_id" : "99829", "city" : "HOONAH", "loc" : [ -135.558435, 58.032237 ], "pop" : 1670, "state" : "AK" }
{ "_id" : "99827", "city" : "HAINES", "loc" : [ -135.542032, 59.251886 ], "pop" : 2246, "state" : "AK" }
{ "_id" : "99826", "city" : "GUSTAVUS", "loc" : [ -135.761542, 58.42835 ], "pop" : 258, "state" : "AK" }
{ "_id" : "99824", "city" : "DOUGLAS", "loc" : [ -134.395041, 58.275597 ], "pop" : 1802, "state" : "AK" }
{ "_id" : "99820", "city" : "ANGOON", "loc" : [ -134.371052, 57.569832 ], "pop" : 1002, "state" : "AK" }
{ "_id" : "99801", "city" : "JUNEAU", "loc" : [ -134.529429, 58.362767 ], "pop" : 24947, "state" : "AK" }
{ "_id" : "99789", "city" : "NUIQSUT", "loc" : [ -150.997119, 70.192737 ], "pop" : 354, "state" : "AK" }
Type "it" for more
>
У функции sort
указывается поле по которому нужно сортировать, и указывается как сортировать (возрастание\убывание)(1-1 соотв.)
Подсчитать количество документов в выборке
> db.zips.find().sort({'_id':-1}).count()
29353
>
Также есть функции skip(N)
и limit(N)
, для того чтобы пропустить первые N документов и вывести только N первых документов в выборке
Вставить значение
> db.zips.insertOne({
... 'field1':'val1',
... 'field2':'val2'
... })
{
"acknowledged" : true,
"insertedId" : ObjectId("5dcae56343b4da469bb68a61")
}
> db.zips.find({'field1':'val1'})
{ "_id" : ObjectId("5dcae56343b4da469bb68a61"), "field1" : "val1", "field2" : "val2" }
>
Замена значения
> db.zips.find({'_id':'01001'},{'state':1})
{ "_id" : "01001", "state" : "niga" }
> db.zips.updateOne({'_id':'01001'},{$set: {'state':'mazafaka'}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.zips.find({'_id':'01001'},{'state':1})
{ "_id" : "01001", "state" : "mazafaka" }
>
Удаление документа
> db.zips.remove({'_id':'01001'})
WriteResult({ "nRemoved" : 1 })
> db.zips.find({'_id':'01001'})
>
Информация о базе (размеры и пр.)
> db.stats()
{
"db" : "test",
"collections" : 1,
"views" : 0,
"objects" : 29353,
"avgObjSize" : 94.50815930228596,
"dataSize" : 2774098,
"storageSize" : 1724416,
"numExtents" : 0,
"indexes" : 1,
"indexSize" : 364544,
"fsUsedSize" : 1849679872,
"fsTotalSize" : 15426048000,
"ok" : 1
}
No Comments