mongodb查询语法与SQL语法对比
SQL Statement | Mongo Query Language Statement | C++客户端调用语法 using namespace bson; DBClientConnection c; c.connect("somehost"); |
CREATE TABLE USERS (aNumber, bNumber) | db.createCollection("mycoll")
|
|
INSERT INTO USERS VALUES(1,1) | db.users.insert({a:1,b:1}) | // GENOID is optional. if not done by client, server will add an _id c.insert("mydb.users", BSON(GENOID<<"a"<<1<<"b"<<1)); // then optionally: string err = c.getLastError(); |
SELECT a,b FROM users | db.users.find({}, {a:1,b:1}) | auto_ptr<DBClientCursor> cursor = c.query("mydb.users", Query(), 0, 0, BSON("a"<<1<<"b"<<1)); |
SELECT * FROM users | db.users.find() | auto_ptr<DBClientCursor> cursor = c.query("mydb.users", Query()); |
SELECT * FROM users WHERE age=33 | db.users.find({age:33}) | auto_ptr<DBClientCursor> cursor = c.query("mydb.users", QUERY("age"<<33)) // or: auto_ptr<DBClientCursor> cursor = c.query("mydb.users", BSON("age"<<33)) |
SELECT a,b FROM users WHERE age=33 | db.users.find({age:33}, {a:1,b:1}) |
|
SELECT * FROM users WHERE age=33 ORDER BY name | db.users.find({age:33}).sort({name:1})
| auto_ptr<DBClientCursor> cursor = c.query("mydb.users", QUERY("age"<<33).sort("name")); |
SELECT * FROM users WHERE age>33 | db.users.find({'age':{$gt:33}})}) |
|
SELECT * FROM users WHERE age<33 | db.users.find({'age':{$lt:33}})}) |
|
SELECT * FROM users WHERE name LIKE"%Joe%" | db.users.find({name:/Joe/}) |
|
SELECT * FROM users WHERE name LIKE"Joe%" | db.users.find({name:/^Joe/}) |
|
SELECT * FROM users WHERE age>33 AND age<=40 | db.users.find({'age':{$gt:33,$lte:40}})}) | auto_ptr<DBClientCursor> cursor = c.query("mydb.users", QUERY("age"<<GT<<33<<LTE<<40));
|
SELECT * FROM users ORDER BY name DESC
| db.users.find().sort({name:-1})
|
|
SELECT * FROM users WHERE a=1 and b='q' | db.users.find({a:1,b:'q'}) |
|
SELECT * FROM users LIMIT 10 SKIP 20 | db.users.find().limit(10).skip(20) | auto_ptr<DBClientCursor> cursor = c.query("mydb.users", Query(), 10, 20); |
SELECT * FROM users WHERE a=1 or b=2
| db.users.find( { $or : [ { a : 1 } , { b : 2 } ] } ) |
|
SELECT * FROM users LIMIT 1 | db.users.findOne() | bo obj = c.findOne("mydb.users", Query()); |
SELECT DISTINCT last_name FROM users | db.users.distinct('last_name') | // no helper for distinct in c++ driver, so send command manually bo cmdResult; bool ok = c.runCommand("mydb", BSON("distinct"<<"users"<<key<<"last_name"), cmdResult); list<bo> results; cmdResult["values"].Obj().Vals(results); |
SELECT COUNT(*y) FROM users | db.users.count() |
|
SELECT COUNT(*y) FROM users where AGE > 30 | db.users.find({age: {'$gt': 30}}).count() | unsigned long long n = c.count("mydb.users", QUERY("age:"<<GT<<30)); |
SELECT COUNT(AGE) from users | db.users.find({age: {'$exists':true}}).count() |
|
CREATE INDEX myindexname ON users(name) | db.users.ensureIndex({name:1})
| c.ensureIndex("mydb.users", BSON("name"<<1)); |
CREATE INDEX myindexname ON users(name,ts DESC) | db.users.ensureIndex({name:1,ts:-1})
|
|
EXPLAIN SELECT * FROM users WHERE z=3 | db.users.find({z:3}).explain() |
|
UPDATE users SET a=1 WHERE b='q' | db.users.update({b:'q'}, {$set:{a:1}},false, true) |
|
UPDATE users SET a=a+2 WHERE b='q' | db.users.update({b:'q'}, {$inc:{a:2}},false, true) | c.update("mydb.users", QUERY("b"<<"q"), BSON("$inc"<<BSON("a"<<2)), false, true); // then optionally: string err = c.getLastError(); bool ok = err.empty(); |
DELETE FROM users WHERE z="abc" | db.users.remove({z:'abc'}); | c.remove("mydb.users", QUERY("z"<<"abc")); // then optionally: string err = c.getLastError();
|
|
|
|