我已经读到可以使用除数组之外的任何_id类型。 (但似乎找不到。你们能确认一下吗?)

由于性能原因,我希望用户名(字符串)为_id

在Node.js中:

const monk = require('monk');
const db = monk('localhost:27017/test',
    function(err) {
        if(err)
            console.log(err.toString());
    });
//const doc = {user: 'aa', password: 'password'};
//const doc = {_id: 'aa', password: 'password'};
const doc = {_id: monk.id('aa'), password: 'password'};
var users = db.get('users');
users.insert([doc]);


第一行注释行有效,但其他行均出错:


_id: monk.id('aa')立即出错
在执行_id: 'aa'时出现users.insert()错误,因为我想它会尝试将字符串转换为ID


错误是相同的,无论:

Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters


如何为_id使用给定的字符串?

ps:要运行此代码,您需要运行mongo,mongod --dbpath data和nodejs:npm install monk; nodejs

最佳答案

monk.id(ARG)会将ARG强制转换为ObjectIddocumentation),这不是您想要的。

相反,只需直接传递字符串:

const doc = { _id: 'aa', password: 'password' };


由于Monk还会自动将id强制转换为ObjectId,因此您必须禁用自动广播:

const db   = monk('localhost:27017/test', ...);
db.options = {
  safe    : true,
  castIds : false
};

09-25 19:02