我想使用对象数组查询集合。数组对象具有一个名为“ userDBID”的字段以及其他各种字段。
这个答案几乎可以回答我的问题here
在我的情况下,我很好奇如何找到这种方式。
var placements = [
{
userDBID: "id1",
field: "fieldvalue"
},
{
userDBID: "id1",
field: "fieldvalue"
}
];
usermodel.find({ _id: { $elemMatch: placements["userDBID"] } }).lean();
我想遍历展示位置数组,并在每个对象中将userDBID用于循环查询。
我知道如果我有一个像这样的用户数据库ID数组,就可以实现
var ids = ["userid1", "userid2"].
usermodel.find({ _id: { $in: ids } }).lean();
我试图查看如何完成此操作,而不必从展示位置创建ID字符串数组,而是使用展示位置数组。
目前,这正是我在路由器中使用的
aRouter.get("/api/user/company/:companyID", async function(req, res) {
const { companyID } = req.params;
try {
let company = await CompanyModel.findById(companyID).populate("placements").lean();
var userDBIDs = [];
company.placements.forEach(p => userDBIDs.push(p.userDBID));
let users = await UserModel.find({ _id: { $in: userDBIDs } }).lean();
res.status(200).json(users);
} catch (err) { res.status(500).json(err); }
});
目标是消除对userDBIDs数组和forEach()循环的需要,而仅使用展示位置数组
我读了很多帖子,但是很难看到类似的内容。我在猫鼬文档中也找不到任何示例。我希望$ all或$ elemMatch运算符可以以某种方式使用,也许可以与其他一些组合运算符一起使用
丹尼尔