参数必须是nodejs中的字符串 [英] Argument must be a string in nodejs

查看:252
本文介绍了参数必须是nodejs中的字符串的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下代码:

              var objectid = infos[i].id;
              var name = infos[i].name;
              return collection.aggregate([
                {$match: {app: new ObjectId(objectid)}},
                {$group: {_id: "$uid", amt: {$sum: 1}}}
              ])

以前,这段代码运行良好,但是最近我开始使用下面的stacktrace:

Previously this code was working fine, but recently I started getting the below stacktrace in sails:

error: TypeError: Argument must be a string
    at TypeError (native)
    at Buffer.write (buffer.js:791:21)
    at serializeObjectId (/Users/user/git/pivot/code/node_modules/sails-mongo/node_modules/bson/lib/bson/parser/serializer.js:242:10)
    at serializeInto (/Users/user/git/pivot/code/node_modules/sails-mongo/node_modules/bson/lib/bson/parser/serializer.js:699:17)
    at serializeObject (/Users/user/git/pivot/code/node_modules/sails-mongo/node_modules/bson/lib/bson/parser/serializer.js:280:18)
    at serializeInto (/Users/user/git/pivot/code/node_modules/sails-mongo/node_modules/bson/lib/bson/parser/serializer.js:705:17)
    at serializeObject (/Users/user/git/pivot/code/node_modules/sails-mongo/node_modules/bson/lib/bson/parser/serializer.js:280:18)
    at serializeInto (/Users/user/git/pivot/code/node_modules/sails-mongo/node_modules/bson/lib/bson/parser/serializer.js:551:17)
    at serializeObject (/Users/user/git/pivot/code/node_modules/sails-mongo/node_modules/bson/lib/bson/parser/serializer.js:280:18)
    at serializeInto (/Users/user/git/pivot/code/node_modules/sails-mongo/node_modules/bson/lib/bson/parser/serializer.js:705:17)
    at serialize (/Users/user/git/pivot/code/node_modules/sails-mongo/node_modules/bson/lib/bson/bson.js:47:27)

这是因为我像这样导入的ObjectId的原因:

It's complaining because of the ObjectId which I imported like so:

var ObjectId = require('mongodb').ObjectID;

正如我之前所说,这很好,但现在不行了.我真的很困惑如果我将objectId作为字符串放置,则不会返回任何结果.如果我将其保持原样(如以前一样),它将引发异常.这是什么问题?

As I said before, this was working fine but not anymore. I'm really confused. If I put objectId as a string it will not return any results. If I leave it as is (as it was working before) it throws exceptions. What is the issue here?

我已阅读以下内容:

https://docs.mongodb.com /v3.0/reference/operator/aggregation/cmp/#exp._S_cmp

我可以在robomongo中做到这一点:

I'm able to do this in robomongo:

 db.getCollection("openevent").aggregate([
                {$match: {app: new ObjectId(OBJECT_ID) }},
                {$group: {_id: "$uid", amt: {$sum: 1}}}
              ])

使用与上述相同的值.我在做什么错??

Using the same values as above. What am I doing wrong??

我看到sails-mongo的以下内容:

└─┬ sails-mongo@0.12.1
  └─┬ mongodb@2.1.6
    └── mongodb-core@1.3.1

推荐答案

为了后代的缘故,这通常是由于mongo版本之间的兼容性问题所致. MongoDB驱动程序2.2使用mongodb-core 2.0(和bson 0.5),而MongoDB驱动程序2.1使用mongodb-core 1.3和bson 0.4.如果尝试将MongoDB驱动程序2.1 ObjectId与MongoDB驱动程序2.2结合使用,则会收到此错误.

For posterity's sake, this is usually due to compatibility issues between versions of mongo. MongoDB driver 2.2 uses mongodb-core 2.0 (and bson 0.5) whereas MongoDB driver 2.1 uses mongodb-core 1.3 and bson 0.4. If you try to use a MongoDB driver 2.1 ObjectId with MongoDB driver 2.2 you'll get this error.

这篇关于参数必须是nodejs中的字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆