发布于 2015-09-14 15:04:56 | 435 次阅读 | 评论: 0 | 来源: 网络整理
MongoDB queries are expressed as JSON (BSON) objects. This quick reference chart shows examples as SQL, mongo shell syntax, and MongoDB C++ driver syntax.
A query expression in MongoDB (and other things, such as an index key pattern) is represented as BSON. In C++ you can use BSONObjBuilder (aka bson::bob) to build BSON objects, or the BSON() macro. The examples below assume a connection c already established:
using namespace bson;
DBClientConnection c;
c.connect("somehost");
Several of the C++ driver methods throw mongo::DBException, so you will want a try/catch statement as some level in your program. Also be sure to call c.getLastError() after writes to check the error code.
SQL | mongo Shell | C++ Driver |
---|---|---|
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:
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 *
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
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));
|
CREATE INDEX myindexname
ON users(name)
|
db.users.ensureIndex( {name: 1 } )
|
c.ensureIndex("mydb.users", BSON("name"<<1));
|
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 LIMIT 1
|
db.users.findOne()
|
bo obj = c.findOne("mydb.users", Query());
|
SELECT DISTINCT last_name
FROM users
WHERE x=1
|
db.users.distinct( 'last_name', {x: 1} )
|
// no helper for distinct yet in c++ driver,
// so send command manually
bo cmdResult;
bool ok = c.runCommand(
"mydb",
BSON("distinct" << "users"
<< "key" << "last_name"
<< "query" << BSON("x"<<1)),
cmdResult);
list<bo> results;
cmdResult["values"].Obj().Vals(results);
|
SELECT COUNT(*)
FROM users
where AGE > 30
|
db.users.find( { age: { $gt: 30 } } ).count()
|
unsigned long long n =
c.count("mydb.users", BSON("age"<<GT<<30));
|
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();
|
也可以参考