如何从这个对象数组访问"name"和"ObjectId"?(猫鼬,MongoDB)



我想访问name属性。我尝试执行以下操作,但它返回undefined:

Category.find()
.select("-_id")
.select("-__v")
.then((categories) => {
let creator = req.userId;
console.log(categories.name) //undefined
if (categories.creator === creator && categories.name === categoryName) {
note
.save()

这是console.log(categories):

[
{ name: 'test11', creator: new ObjectId("6359766eaf27f731e789f061") },
{ name: 'test11', creator: new ObjectId("6359766eaf27f731e789f061") },
{ name: 'categ1', creator: new ObjectId("635a316453d25ea50a3a4c5c") },
{ name: 'categ1', creator: new ObjectId("635a316453d25ea50a3a4c5c") },
{ name: 'categ1', creator: new ObjectId("635a316453d25ea50a3a4c5c") },
{ name: 'categ1', creator: new ObjectId("635a316453d25ea50a3a4c5c") },
{ name: 'categ1', creator: new ObjectId("635a316453d25ea50a3a4c5c") },
{
name: 'newCategName',
creator: new ObjectId("635a316453d25ea50a3a4c5c")
}
]

我想检查当前登录用户的ID和文档名称是否与类别模式中的一对完全匹配

Categories这里是一个对象数组,包含name和ObjectId。

所以只要在数组上循环,就可以得到你想要的。在代码中,我看到你这样做:

console.log(categories.name)

尝试:

console.log(categories[0].name)

由于返回的类别是对象列表,而不是单个对象。您可以使用Array.find()来筛选您的条件。

var categories = [
{ name: "test11", creator: new ObjectId("6359766eaf27f731e789f061") },
{ name: "test11", creator: new ObjectId("6359766eaf27f731e789f061") },
{ name: "categ1", creator: new ObjectId("635a316453d25ea50a3a4c5c") },
{ name: "categ1", creator: new ObjectId("635a316453d25ea50a3a4c5c") },
{ name: "categ1", creator: new ObjectId("635a316453d25ea50a3a4c5c") },
{ name: "categ1", creator: new ObjectId("635a316453d25ea50a3a4c5c") },
{ name: "categ1", creator: new ObjectId("635a316453d25ea50a3a4c5c") },
{
name: "newCategName",
creator: new ObjectId("635a316453d25ea50a3a4c5c"),
},
];
const found = categories.find(
(doc) => doc.creator === creator && doc.name === categoryName
);
if (found) {
// rest of the code
}

尽管基于用例的更好、高效的方法可以是在查询本身中直接使用筛选条件,而不是获取所有类别然后进行筛选。

const creator = req.userId;
const categoryName = "ABC";
const result = await Category.findOne(
{ creator: creator, name: categoryName },
"-_id -__v"
).exec();
if (result) {
// rest fo the code
}

使用findOne()和第二个参数投影来获得匹配的类别。

最新更新