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
Javascript 节点js,Mongoose$,不工作_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript 节点js,Mongoose$,不工作

Javascript 节点js,Mongoose$,不工作,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我想找到firstname和lastname匹配的用户。 router.post('/post/user/search/tag', function (req, res) { function getRegex(_query) { return { $regex: '^' + _query + '|.*' + _query, $options: "i", }; } var query = {}; query.$and = []; _.map(

我想找到firstname和lastname匹配的用户。

router.post('/post/user/search/tag', function (req, res) {

function getRegex(_query) {
    return {
        $regex: '^' + _query + '|.*' + _query,
        $options: "i",
    };
}

var query = {};
query.$and = [];

_.map(req.body.params, function(_obj){
   query.$and[v.type] = getRegex(v.name);  
});

User.find(query).exec(function (err, docs) {
 res.json({err: false, data: docs});
});

});
此api的示例输入为:

{"params":
  [
    {
      "name":"suresh",
      "type":"first_name"
    },
    {
      "name":"pattu",
      "type":"last_name"
    }
  ]
}
我从猫鼬那里得到的错误是:

undefined { MongoError: $and/$or/$nor must be a nonempty array
    at Function.MongoError.create (/Users/user/code/project/trainer-ville-admin/node_modules/mongodb-core/lib/error.js:31:11)
    at queryCallback (/Users/user/code/project/trainer-ville-admin/node_modules/mongodb-core/lib/cursor.js:212:36)
    at /Users/user/code/project/trainer-ville-admin/node_modules/mongodb-core/lib/connection/pool.js:469:18
    at _combinedTickCallback (internal/process/next_tick.js:67:7)
    at process._tickCallback (internal/process/next_tick.js:98:9)
  name: 'MongoError',
  message: '$and/$or/$nor must be a nonempty array',
  ok: 0,
  errmsg: '$and/$or/$nor must be a nonempty array',
  code: 2,  codeName: 'BadValue' }
在mongoose find查询上解析的输入为:

{ '$and': 
   [ first_name:{ '$regex': '^suresh|.*suresh', '$options': 'i' },
     last_name:{ '$regex': '^pattu|.*pattu', '$options': 'i' }
   ] 
}
实际上不需要,因为所有的MongoDB查询参数都已经是和条件:

改为这样做:

var input = {
    "params" : [
            {
                    "name" : "suresh",
                    "type" : "first_name"
            },
            {
                    "name" : "pattu",
                    "type" : "last_name"
            }
    ]
};



var query = { };
input.params.forEach(p => {
  query[p.type] = new RegExp('^'+ p.name + '|.*' + p.name, 'i');
})
query
中的输出如下所示:

{ "first_name" : /^suresh|.*suresh/i, "last_name" : /^pattu|.*pattu/i }
这当然是你想要的完全正确的陈述


另请参见在JavaScript环境中接受生成对象的操作。

您的问题如下:

_.map(function(_obj){
   query.$and[v.type] = getRegex(v.name);  
});
您正在调用
\uu.map
,它迭代一个集合,但那里没有集合。它应该是这样的:

_.map(someCollection, function(_obj) {
   query.$and[v.type] = getRegex(v.name);  
});
您没有遍历代码中的任何内容,因此
query.$and[v.type]=getRegex(v.name)从未执行,因此$and数组为空

另外,我看不到在您的代码片段中定义了
v

以下是一些有用的链接,介绍了
\uwMap
的工作原理及其接收的参数:


希望对您有所帮助。

您使用的是哪个版本的mongo?对象无效,您也不需要
$和
。所有MongoDB查询参数都已存在,并且满足条件