以下是两种猫鼬模式:
雇员模式:
var EmployeeSchema = new Schema({
name : String,
employeeDetailsId: {
type: Schema.Types.ObjectId,
ref: 'employeedetails'
}
});
员工详细模式:
var EmployeeDetailSchema = new Schema({
employeeId: {
type: Schema.Types.ObjectId,
ref: 'employee'
},
statusId: {
type: Schema.Types.ObjectId,
ref: 'status'
}
});
雇员详细模式数据会按需保存,例如当特定状态分配给雇员时。在这种情况下,一旦保存了雇员详细信息文档,相应的雇员详细信息ID就会保存回雇员模式作为雇员详细信息ID
现在,员工模式和员工模式之间存在双向关系。
用例:
我想找到所有被标记为特定状态的员工。假设输入状态ID为1234
,那么我想获取EmployeeDetail文档中状态ID为1234
的所有员工。
以下是我尝试使用猫鼬的方法:
exports.getEmployeesByStatus = function (req, res) {
console.log('Status ID : ' + req.query.statusId);
EmployeeModel.find({'employeeDetailsId.statusId': {$eq: mongoose.Types.ObjectId(req.params.statusId)}})
.exec(function (err, result) {
if (err)res.send('400', {message: 'Unable to fetch employees data by status. Please try again later'});
res.jsonp(result);
});
};
返回的结果为空数组,尽管有被分配到某些状态的员工。我对猫鼬的质疑方法是对的吗?
根据您的模式设计,您正在对employeeDetailsId
使用EmployeeDetailSchema
的引用。因此,在没有填充的情况下,无法直接比较参考模型字段。您应该先填充文档,然后比较和筛选文档,或者用户聚合功能可以实现您的目标。
你可以试试这个:
EmployeeModel.aggregate([
{$lookup: {from: 'employeedetails', localField: 'employeeDetailsId',foreignField: '_id',as: 'details'}},
{$match: { $and:[{ "details.statusId": { "$exists": true } },{"details.statusId": req.params.statusId}]} }
]).exec(function (err, result) {
if (err) return res.send('400', {message: 'Unable to fetch employees data by status. Please try again later'});
return res.jsonp(result);
});
N. B:将String转换为ObjectId的值
req.params.statusId
{$match: {$and: [{"details.statusId": {"$exists": true}}, {"details.statusId": mongoose.Types.ObjectId(req.params.statusId)}]}}
我的简化模式如下所示: 我想找到所有叫艾伦的人。我看了这个非常相似的问题,但它发现的是团队,而不是人。我想这里也是。即使我没有persons集合,是否有返回persons的查询? 我想我可以使用引用的技术找到团队,然后撤出他们的人员。我猜是这样的: 但是还有更直接的方法,对吗?
我有一系列这样的Mongoid 这些是我收藏的文件的mongo-id。 现在,通过获取这些mongoIDs的数组,即['mongoID1','mongoID2','mongoID3'],我需要通过使用其_id来查询这些id指定的每个文档,并在我的代码逻辑中独立处理其数据。为了简单起见,我刚刚“打印”了输出ieres.json(doc.name)。 如果Mongoose/MongoDB中确实存在这样
如何根据对象数组的条件获取所有索引?我已经尝试了下面的代码,但是它只返回第一次出现的代码。
问题内容: 我刚刚陷入这个问题。我有两种猫鼬模式: 问题是,如何从每个父文档中获取所有子文档(在这种情况下为对象)?假设我有一些数据: 我想通过一个查询来检索所有18岁以上的孩子。每个答案将不胜感激,谢谢! 问题答案: 您可以在最新的MongoDB版本中用作查询投影运算符。从mongo shell: 这会从数组中过滤掉较小的儿童文档: 如您所见,子代仍在其父文档中分组。MongoDB查询返回集合中
我有一个mongodb集合的mongoose模式,我将其定义如下: 在数据库集合中,我当前有一个文档,它包含除以外的所有属性的值,用于测试目的。我有一个服务器endpoint,当被调用时,它应该发出一个PUT请求来更新文档并向sketches数组中添加一个对象: 在这个web服务中,我基本上试图通过用户名选择用户文档,用户名作为参数传递给url字符串,如下所示: 由于某种原因,当我尝试使用具有以下
问题内容: 我有Mongoose架构,其中有一个天属性 我想查找输入的最后一天的数据,所以说今天就是我要查找输入的最后一天。或者说另一种说法。什么是属性小于等于但大于所有其他文档的文档呢? 或另一种方式 属性小于等于的所有文档集中的最大元素是什么 然后遍历我所有的文档,我该怎么做呢? 问题答案: 在外壳中将是: 查找所有小于16085 的文档,对它们进行降序排序,然后采用第一个。 在Mongoos