在var中使用查询字符串进行搜索不适用于猫鼬

时间:2018-08-18 04:28:13

标签: node.js mongoose

我面临一个非常简单的问题,如果我将其放在find()中并通过var str;,我将在find(str)中给出什么内容;

如果我在猫鼬中使用以下内容进行搜索

Hospitals.find({ $or: [{treatment:'HYDERABAD'} ,{city:'HYDERABAD'} ]}).

).sort({'city': 1}).exec(function (err, hospitals) {

                if(err){.some code.}

                else{.some code.}

  });

搜索成功

但是如果我将其放在字符串中并传递给 find()

像这样:

var mystr;
mystr = "{ $or: [{treatment:'HYDERABAD'} ,{city:'HYDERABAD'} ]}";
 Hospitals.find(mystr).sort({'city': 1}).exec(function (err, hospitals) {
if(err){.some code.}
  else{.some code.}

});

出现此错误

{ ObjectParameterError: Parameter "filter" to find() must be an object, got { $or: [{treatment:'HYDERABAD'} ,{city:'HYDERABAD'} ]}

at MongooseError.ObjectParameterError (/home/ubuntu/workspace/node_modules/mongoose/lib/error/objectParameter.js:23:11)

at Query.find (/home/ubuntu/workspace/node_modules/mongoose/lib/query.js:1424:16)

at Function.find (/home/ubuntu/workspace/node_modules/mongoose/lib/model.js:1413:13)

at /home/ubuntu/workspace/app.js:1459:27

at callbacks (/home/ubuntu/workspace/node_modules/express/lib/router/index.js:164:37)

at param (/home/ubuntu/workspace/node_modules/express/lib/router/index.js:138:11)

at pass (/home/ubuntu/workspace/node_modules/express/lib/router/index.js:145:5)

at Router._dispatch (/home/ubuntu/workspace/node_modules/express/lib/router/index.js:173:5)

at Object.router (/home/ubuntu/workspace/node_modules/express/lib/router/index.js:33:10)

at next (/home/ubuntu/workspace/node_modules/connect/lib/proto.js:174:15)

at Object.handle (/home/ubuntu/workspace/node_modules/express-sanitizer/lib/express-sanitizer.js:25:5)

at next (/home/ubuntu/workspace/node_modules/connect/lib/proto.js:174:15)

at /home/ubuntu/workspace/node_modules/body-parser/lib/read.js:130:5

at invokeCallback (/home/ubuntu/workspace/node_modules/raw-body/index.js:224:16)

at done (/home/ubuntu/workspace/node_modules/raw-body/index.js:213:7)

at IncomingMessage.onEnd (/home/ubuntu/workspace/node_modules/raw-body/index.js:273:7)

message: 'Parameter "filter" to find() must be an object, got { $or: [{treatment:\'HYDERABAD\'} ,{city:\'HYDERABAD\'} ]}',

name: 'ObjectParameterError' }

有人可以帮忙吗

谢谢

Anurag

1 个答案:

答案 0 :(得分:0)

Model.find()将条件参数作为类型Object

这样做,

mystr = "{ $or: [{treatment:'HYDERABAD'} ,{city:'HYDERABAD'} ]}";

mystr转换为字符串。因此,将mystr传递给find(mystr)时出现错误。

您应该这样做:

  mystr = { $or: [{treatment:'HYDERABAD'} ,{city:'HYDERABAD'} ]};