技术开发 频道

MySQL一族眼中的MongoDB:与JS联系紧密

  find()函数是MongoDB内置的函数,用来为用户重算数据,该函数有2个可选参数:

  参数1、一种查询规范

  参数2、要返回的列(即属性)

  例如:

  mongos> db.foo.find({ attr2: 3})

  { "_id" : ObjectId("4ea52a5035a81331e048baab"), "attr2" :
3 }

  这个命令是查询c1值为3的所有对象。attr2属性没有索引,但可以对其进行查询。如果要强制使用_id key,只需要按如下命令操作即可(当然读者在操作时对象可能会有所不同):

  mongos> db.foo.find({ _id: ObjectId("4ea52a5035a81331e048baab")})

  { "_id" : ObjectId("4ea52a5035a81331e048baab"), "attr2" :
3 }

  最后,可以通过使用explain()使上文提到的后两个查询结果更具体(这里只为演示该功能,可能读者并不需要):

  mongos> db.foo.find({ attr2: 3}).explain()

  {

  "
cursor" : "BasicCursor",

  "nscanned" :
6,

  "nscannedObjects" :
6,

  "n" :
1,

  "millis" :
0,

  "nYields" :
0,

  "nChunkSkips" :
0,

  "isMultiKey" : false,

  "indexOnly" : false,

  "indexBounds" : {

  }

  }

  返回结果为一个JavaScript对象。对于要查询属性来说,属性attr2没有索引,因此在查询时会扫描所有的对象,如下所示:

  mongos> db.foo.find({ _id: ObjectId("4ea52a5035a81331e048baab")}).explain()

  {

  "
cursor" : "BtreeCursor _id_",

  "nscanned" :
1,

  "nscannedObjects" :
1,

  "n" :
1,

  "millis" :
22,

  "nYields" :
0,

  "nChunkSkips" :
0,

  "isMultiKey" : false,

  "indexOnly" : false,

  "indexBounds" : {

  "_id" :
[

  [

  ObjectId("4ea52a5035a81331e048baab"),

  ObjectId("4ea52a5035a81331e048baab")

  
]

  ]

  }

  }

  这里只查看了一个对象,要获取数据,需要使用id列来查找(查看indexBounds属性)。

  可以看到,除了那些对象与JavaScript,查询操作与我们平时使用的RDBMS并没有什么不同。

0
相关文章