MongoDb
Документация
Установка
$ apt-key adv--keyserver hkp://keyserver.ubuntu.com:80--recv EA312927 $ echo"deb http://repo.mongodb.org/apt/debian wheezy/mongodb-org/3.2 main"|sudotee/etc/apt/sources.list.d/mongodb-org-3.2.list $ apt-get update $ apt-get install-y mongodb-org
Настройка
Добавление внешнего IP адреса
Version 2.x
nano /etc/mongod.conf
port: 27017 bind_ip: 127.0.0.1,89.2.1.1
Подробнее: https://docs.mongodb.org/v2.2/reference/configuration-options/
Version 3.x
nano /etc/mongod.conf
# network interfaces net: port: 27017 bindIp: 127.0.0.1,89.2.1.1
Подробнее: https://docs.mongodb.org/v3.2/reference/configuration-options/
PHP
- sudo pecl install mongo
Создание пользователя
$ mongo MongoDB shell version: 2.4.9 connecting to: test> use admin; switched to db admin
2.4
- > use admin;
- > db.removeUser('admin');
- > db.addUser({user:'admin', pwd:'pass', roles: ['dbAdminAnyDatabase']});
- > db.auth('admin','pass');
Roles
- read
- readWrite
- dbAdmin
- dbOwner
- userAdmin
- clusterAdmin
- clusterManager
- clusterMonitor
- hostManager
- readAnyDatabase
- readWriteAnyDatabase
- userAdminAnyDatabase
- dbAdminAnyDatabase
2.6.4
- > use some_database
- > db.getSiblingDB("admin").runCommand({authSchemaUpgrade: 1 });
- > db.dropUser('admin');
- > db.createUser({ user:"user", pwd:"password", roles:["read","readWrite","dbAdmin"]});
- > db.auth('admin','pass');
3.0.0
- > use admin;
- > db.dropUser('admin')
3.2.3
Изменение пользователя
- db.changeUserPassword("reporting", "SOh3TbYhxuLiW8ypJPxmt1oOfL")
Привелегии
db.runCommand( { usersInfo:"admin", showPrivileges:true } );
Backup / Restore
Backup
Если не задан пароль у юзера admin в БД admin
mongodump --out /tmp/mongodump
Если задан пароль у юзера
mongodump --username admin --password password --out /tmp/mongodump
Если дамп выполняется с учетом пользовательских настроек
mongodump --host localhost --port 3017 --username admin --password pass --out /tmp/mongodump
Restore
mongorestore --db some_other_db -c some_or_other_collection tmp/mongodump/some_collection.bson
mongorestore --db some_other_db --username user --password pass ./
SEARCH
- db.getCollection('rooms').find({roomid: 'user-53'})
- db.users.find({"name": /.*Супр.*/})
INSERT
UPDATE ($where, $params)
- db.unicorns.update({name: 'Roooooodles'}, {weight: 590})
- db.unicorns.update({weight: 590}, {$set: {name: 'Roooooodles', dob: new Date(1979, 7, 18, 18, 44), loves: ['apple'], gender: 'm', vampires: 99}})
- db.getCollection('rooms').update({},{messageCount: 0})
- db.getCollection('rooms').update({},{$set: {'messageCount': 0}}, {multi: true});
db.getCollection('rooms').update({},{$set:{'messageCount':0}},{ upsert:true, multi:true}); db.getCollection('rooms').find({});
geoNear
MongoDB: geoNear не возвращаясь расстояние
Мне нужно, чтобы изменить существующий геопространственных запросов таким образом, что она включает в себя расстояние в результаты поиска. (Оба документа и существующий запрос с использованием устаревших координатных пар.) Исходный запрос использует $near. Чтение документации MongoDB похоже, geoNear должен возвратить расстояние, как показано на нескольких примерах.
В то время как я был в состоянии изменить запрос, чтобы использовать geoNear, расстояния не включены в результаты поиска. Вот пример нового запроса:
{ geoNear: 'users', near: [ '0', '0' ], maxDistance: '90', query: { userName: { '$regex': '^test' } } }
Единственное, что не понятно, как Mongo связей в месте, указанному в запросе, на расположение документа. В моем случае пользователи документе есть поле с именем lastKnownPosition. Как работает Mongo даже знаю, на запрос к этому полю?
Вот пример результатов поиска:
{ "__v" : 0 , "_id" : { "$oid" : "5413824f8b4d6f7505120a53"} , "lastKnownPosition" : { "lon" : 0 , "lat" : 0} ", "userName" : "test123" }