我有分配,签入和资产集合,当我进入/assign
页面时,我运行查询:
Asset.find({"author.id":req.user.id}, function(err, allAsset) {
if(err){
console.log(err);
} else {
res.locals.assets = allAsset; // Set the data in locals
next();
}
});
查找登录用户拥有的所有资产。我想要它,以便如果已分配asset
,则无法再次分配。来自mongodb的已分配资产的示例文档是:
{ "_id" : ObjectId("59fb2cdb02b2a83502cd0df6"),
"subuser" : "Kirbytech",
"checkoutDate" : "2017-12-30",
"notes" : "241361",
"author" : {
"id" : ObjectId("59d7f98a77fcc221d6e3c93d"),
"email" : "joe@example.com.ca"
}, "asset" : {
"id" : "59f7cde58a6f9b11e1cd07d9",
"num" : 1005
},
"__v" : 0 }
我看到this但它对我没有多大帮助。我知道我需要搜索找到或找不到asset.id
的所有文档(不确定哪个),然后将这些结果保存到res.locals.assets
。
我当然希望这是有道理的。如有需要,请要求澄清。
答案 0 :(得分:0)
您可以使用user_id和asset_id查询Assign集合,如果返回值为null,则尚未分配资产。
我假设在将资产“分配”给用户时创建了分配记录。
Assign.find({}, function(err, assignedRecords){
// this will be an array of all assigned assets
let allAssignedAssets = assignedRecords.map((doc) =>doc.asset.id)
// now get all the assets not in the above array
Asset.find({id:{$nin: allAssignedAssets}}, function(err, allUnassignedAssets) {
if(err){
console.log(err);
} else {
res.locals.assets = allUnassignedAssets; // all unassigned assets
next();
}
}
})
如果您需要更多说明,请与我们联系。