Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js MongoDB和MongoJS-can';t get runCommand用于文本查询_Node.js_Mongodb_Mongojs - Fatal编程技术网

Node.js MongoDB和MongoJS-can';t get runCommand用于文本查询

Node.js MongoDB和MongoJS-can';t get runCommand用于文本查询,node.js,mongodb,mongojs,Node.js,Mongodb,Mongojs,我的目标是从节点使用MongoDB的(2.4.4)文本命令。它可以从命令行正常工作。基于上一个SO问题,我尝试使用MongoJS(0.7.17),但无法成功。代码如下: mongojs = require('mongojs'); var products = mongojs('localhost:27017/mydb').collection('products'); products.runCommand('text', {search: 'a'}, function (err, docs)

我的目标是从节点使用MongoDB的(2.4.4)文本命令。它可以从命令行正常工作。基于上一个SO问题,我尝试使用MongoJS(0.7.17),但无法成功。代码如下:

mongojs = require('mongojs');
var products = mongojs('localhost:27017/mydb').collection('products');
products.runCommand('text', {search: 'a'}, function (err, docs) {
   ...
});
docs返回未定义且err为空。我可以执行一个普通的函数,比如products.find()很好。。。我可以在MongoDB命令行上执行搜索。有人知道怎么做的吗

顺便说一句,以下是文档在回调中包含的内容:

{
    "queryDebugString": "||||||",
    "language": "english",
    "results": [],
    "stats": {
        "nscanned": 0,
        "nscannedObjects": 0,
        "n": 0,
        "nfound": 0,
        "timeMicros": 55
    },
    "ok": 1
}

顺便说一句,如果有另一种方法仅使用普通的本机驱动程序就可以实现这一点,我对此没有意见。

使用本机驱动程序,我可以在db对象上运行命令,如下所示:

var MongoClient = require("mongodb").MongoClient;
MongoClient.connect(database, function (err, db) {
    if (!err) {
        db.command({ distinct: "Messages", key: "session" }, function (err, result) {
            //more code here
        });
    }
});

我注意到您正在从collection对象上运行该命令,这可能是问题所在。

您需要在db对象内调用该命令,而不是在connect对象内调用该命令

MongoClient.connect(url, function (err, db) {
    if (!err) {
        var dbo = db.db();
        dbo.command({ insert: "mycollection", documents: [{"test":1}]}, function 
(err, result) {

            if (err)
            {
                console.log(err);
            }else
            {
                console.log("1 document inserted",result);
            }
            }
        );

        }
});

是的,尽管mongojs的文件说这应该行得通。我只是得到了你提议的一个变体。。。正在运行数据库。谢谢。它看起来像:db.command({text:'products',search:'mysearchterm'},function(e,o){});有人能解释一下使用find和使用db.command的区别吗?为什么我不能将文本索引与find一起使用。这不是更符合惯例吗?我得到的是db.command不是一个函数,我有mongodb 3.0.6,使用runCommand得到的结果与well@NaguibIhab这是因为您没有在url中包含db名称。例如:如果您使用数据库url作为
host:port
进行连接,则会出现错误,因此正确的方法是使用url作为
host:port/dbName
或使用变量
let DB=DB.DB(dbName);DB.command({})