Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.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 查找字符串参数_Node.js_String_Mongodb_Mongoose - Fatal编程技术网

Node.js 查找字符串参数

Node.js 查找字符串参数,node.js,string,mongodb,mongoose,Node.js,String,Mongodb,Mongoose,我有一个使用mongoose查询数据库的函数。连接已经工作了。但是,如果我不使用实际字符串,而是使用字符串变量,那么.find将返回一个未定义的对象(即,它找不到任何内容)。代码如下: function getUser(obj, callback){ console.log("obj.key: " + obj.key[0].toString() + ":" + obj.value[0].toString()); var first = "name.first"; cons

我有一个使用mongoose查询数据库的函数。连接已经工作了。但是,如果我不使用实际字符串,而是使用字符串变量,那么.find将返回一个未定义的对象(即,它找不到任何内容)。代码如下:

function getUser(obj, callback){
    console.log("obj.key: " + obj.key[0].toString() + ":" + obj.value[0].toString());
    var first = "name.first";
    console.log("first: " + first);
    var second = "nicholas";
    console.log("second: " + second);
    User.findOne({first:second}, 'name telephone address1 address2 city state zip country', function(err, user){//nothing can be found when not directly using a string!!!
        console.log("got this user: " + user.name);

    });
}
但是,如果我将该行替换为。find,则它会:

User.findOne({"name.first":"nicholas"}, 'name telephone address1 address2 city state zip country', function(err, user){
我以前从未见过这样的事。通常一个字符串就是一个字符串,不管你用它做什么,它都会工作。 你知道哪里不对吗

p、 s.控制台日志:

obj.key:name.first:nicholas
first:name.first
second: nicholas
错误位于:console.log(“获取此用户…无法读取 属性“name”为null

根据,在表示法
{first:second}
中,
first
是一个属性名,而不是一个需要扩展的变量

引用该文件:

对象属性名称可以是任何字符串,包括空字符串。如果属性名称不是有效的JavaScript标识符,则必须将其括在引号中。不是有效标识符的属性名称也不能作为点(.)属性访问,但可以使用类似数组的符号(“[])进行访问和设置


给你一个问题:

  • User.findOne({“name.first”:“nicholas”},…)
    的工作原理是将属性命名为
    name.first
    (这是一个使用
  • User.findOne({first:“nicholas”},…)
    在引用名为
    first
通过使用
[]
初始化对象字段,可以获得所需的结果:

query = {}
query[first] = "nicholas"
//    ^^^^^
//  this is a variable
User.findOne(query, ...)
请注意,由于这是一个经常性的需求,ECMA 6允许您编写类似的内容:


好了,到今天为止,主要的JS实现还不太支持这一点。

使用
[]
符号将变量用作对象键:

var first = "name.first";
var second = "nicholas";
var query = {};
query[first] = second;
User.findOne(query, 'name telephone address1 address2 city state zip country', function(err, user){
    console.log("got this user: " + user.name);
});

JSON对象的关键部分似乎是问题所在。我可以使用变量作为值部分,但出于某种原因,关键部分必须是字符串而不是变量。我也尝试过使用平面对象(firstname而不是name.first),但我得到了相同的结果。酷!这实际上很有道理,尽管我不得不承认,我自己不会想到这一点。{[首先]:“nicholas”}不起作用,但可能我用错了,但创建一个对象作为查询数组很有魅力,而且正是我想做的,所以谢谢:)
var first = "name.first";
var second = "nicholas";
var query = {};
query[first] = second;
User.findOne(query, 'name telephone address1 address2 city state zip country', function(err, user){
    console.log("got this user: " + user.name);
});