如果在不同的集合中从结果中删除文档

时间:2017-11-02 17:02:25

标签: mongodb mongoose

我有分配,签入和资产集合,当我进入/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

我当然希望这是有道理的。如有需要,请要求澄清。

1 个答案:

答案 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();
   }
 } 
})

如果您需要更多说明,请与我们联系。