Node.js MongoDB和MongoJS-can';t get runCommand用于文本查询
我的目标是从节点使用MongoDB的(2.4.4)文本命令。它可以从命令行正常工作。基于上一个SO问题,我尝试使用MongoJS(0.7.17),但无法成功。代码如下: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)
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({})