我这里有我的示例 userSchema:
{
"_id": objectId("6092076ba811e50b565497ec"),
"username": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="dbafbea8af9bbcb6bab2b7f5b8b4b6" rel="noreferrer noopener nofollow">[email protected]</a>",
"address_book": [{
"_id": objectId("6092b1120f7e370b954a2708"),
"address": "address1",
"address2": "address2",
}, {
"_id": objectId("6093edcb88796b0a5eba19a3"),
"address": "test1",
"address2": "test2",
}]
}
我可以通过以下方式找到用户吗
objectId("6092076ba811e50b565497ec")
和 address_book._id object("6093edcb88796b0a5eba19a3")
它只返回我选择的address_book
?我的预期返回数据应该是这样的
{
"_id": objectId("6092076ba811e50b565497ec"),
"username": "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="166273656256717b777f7a3875797b" rel="noreferrer noopener nofollow">[email protected]</a>",
"address_book": {
"_id": objectId("6093edcb88796b0a5eba19a3"),
"address": "test1",
"address2": "test2",
}
}
这是我的示例函数
let user = [];
await User.findOne({
_id: id,
"address_book._id": address_id,
})
.then((result) => {
console.log(result);
user = result;
})
.catch((err) => console.log(err));
return user;
有了这个我就得到了所有的地址簿
还有address_book._id
有updateOrCreate函数吗?
提前谢谢您。
最佳答案
从 MongoDB 4.4 开始,您可以在 find 方法中使用聚合运算符,
$filter
迭代address_book
数组的循环并匹配_id
条件$first
从上面过滤结果中选择第一个元素
await User.findOne({
_id: id,
"address_book._id": address_id
},
{
username: 1,
address_book: {
$first: {
$filter: {
input: "$address_book",
cond: { $eq: ["$$this._id", mongoose.Types.ObjectId(address_id)] }
}
}
}
})
关于mongodb - Node mongoose 嵌入文档数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67419919/