Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.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 为什么将此数组视为对象,以及如何处理它?_Javascript_Node.js_Mongodb_Recursion - Fatal编程技术网

Javascript 为什么将此数组视为对象,以及如何处理它?

Javascript 为什么将此数组视为对象,以及如何处理它?,javascript,node.js,mongodb,recursion,Javascript,Node.js,Mongodb,Recursion,大家早上好! 我有个小问题。我想检查数据库中的字段,并将其存储到变量中。为此,我做了以下工作: async function buildUsername(value) { const { db } = await connectToDatabase(URI, DATABASE); let obj = await db.collection(COLLECTION).find({username: value}).toArray() //here I want to do s

大家早上好! 我有个小问题。我想检查数据库中的字段,并将其存储到变量中。为此,我做了以下工作:

async function buildUsername(value) {
    const { db } = await connectToDatabase(URI, DATABASE);
    let obj = await db.collection(COLLECTION).find({username: value}).toArray()
    //here I want to do something like: let username = obj.username
    return typeof obj
}
这将返回我的对象

如果我记录obj
,它会输出如下结构:

[
    {
        name: "tom"
        username: "tomhopkins"
        //etc...

    }
]
我想访问用户名并将其存储到变量中。如果我这样做:
username=obj[0]。username
不起作用,因为它说obj
不是数组,而是对象

我不得不说,我不能用回调来实现这一点,因为我需要返回一个尚未存储在数据库中的用户名

例如:如果存储了一个用户名为“tomhanks”的文档,并且有另一个人同名,则我无法注册相同的用户名。我调用函数username,添加一个后缀(结尾是一个整数),然后再次检查是否有另一个后缀。如果没有,则返回它,否则我使用
username+后缀递归调用函数
,依此类推

有什么建议吗

多谢各位

.find()方法返回数组,尝试使用.findOne():它返回一个对象:

let obj = await db.collection(COLLECTION).findOne({username: value})
// here you can use obj.username

typeof new Array()。根据您显示的日志记录,
obj[0].username
不起作用是没有意义的。
console.log(Array.isArray(obj))
返回什么?在使用
toArray()
之前也应该等待,尝试将等待包装在
()
let obj=(wait db.collection(collection.find({username:value})).toArray()
@charlietfl首先感谢您的回答。如果我记录console.log(Array.isArray(obj)),它会显示“false”和obj[o].usernameundefined@charlietfl用findOne()解决了这个问题。这不会改变逻辑。再次感谢!!:)