MongoDB存储功能通过控制台添加到哪里?

时间:2016-06-02 09:42:10

标签: mongodb console performancecounter

我通过计数器集合和getNextSequence()函数创建了自动递增序列字段(绝对与docs中一样)

根据another document JavaScript函数存储在名为system.js

的特殊系统集合中

但我的数据库中没有这样的集合(至少db.system.js.find()显示空结果):

> db.dropDatabase();
{ "dropped" : "mongopa", "ok" : 1 }
> version()
3.2.5
> db.counters.insert({_id: "userid", seq: 0 })
WriteResult({ "nInserted" : 1 })
> db.counters.find()
{ "_id" : "userid", "seq" : 0 }
> function getNextSequence(name) {
...    var ret = db.counters.findAndModify(
...           {
...             query: { _id: name },
...             update: { $inc: { seq: 1 } },
...             new: true
...           }
...    );
... 
...    return ret.seq;
... }
> db.system.js.find()
> show collections
counters
> db.users.insert({"login":"demo","user_id":getNextSequence("userid"),"password":"demo"})
WriteResult({ "nInserted" : 1 })
> db.users.find()
{ "_id" : ObjectId("574ff1c7436a1b4f9c6f47b9"), "login" : "demo", "user_id" : 1, "password" : "demo" }
> db.users.insert({"login":"demo2","user_id":getNextSequence("userid"),"password":"demo2"})
WriteResult({ "nInserted" : 1 })
> db.users.find()
{ "_id" : ObjectId("574ff1c7436a1b4f9c6f47b9"), "login" : "demo", "user_id" : 1, "password" : "demo" }
{ "_id" : ObjectId("574ff1d6436a1b4f9c6f47ba"), "login" : "demo2", "user_id" : 2, "password" : "demo2" }
> 

那么getNextSequence函数真正存储在哪里?

1 个答案:

答案 0 :(得分:3)

将函数定义为

function getNextSequence(name) {
var ret = db.counters.findAndModify(
       {
             query: { _id: name },
         update: { $inc: { seq: 1 } },
         new: true
       }
);
return ret.seq;
}

它仅为该特定会话定义,并且在会话结束后无法使用。因此,它没有保存在任何地方。

要使函数在会话中可重用,您需要使用,

显式保存函数system.js
db.system.js.save(
{
    _id: "getNextSequence",
    value: function(name){var ret = db.counters.findAndModify({
             query: { _id: name },
             update: { $inc: { seq: 1 } },
             new: true
       });
    return ret.seq;}
 })

保存该功能后,您可以通过

进行交叉检查
db.system.js.find()

您需要调用此

  

db.loadServerScripts();

跨会议。它加载 system.js 集合中保存的所有脚本。

有关详细信息,请查看here