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()解决了这个问题。这不会改变逻辑。再次感谢!!:)