javascript-猫鼬模式的加入/查找聚合

前端之家收集整理的这篇文章主要介绍了javascript-猫鼬模式的加入/查找聚合 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我目前正在制作一个成就系统,并尝试将其保存在两个集合中.
一个包含名称和ID的集合,
以及其他与用户有关的收藏及其进度.

我一直在查看“聚合”和“ $lookup”,并取得了一些进展,但是我不确定要获得所需的输出将需要做什么.

如果用户存在成就,则通过集合获取进度值及其用户标识;否则,将进度值设为0.

这不是某种形式的加入,例如MysqL吗?在MongoDB中如何?

可变的用户ID = 33;

尝试:

  1. db.getCollection('achievements').aggregate([
  2. {
  3. $lookup:
  4. {
  5. from: "achievement_users",localField: "id",foreignField: "id",as: "inventory_docs"
  6. }
  7. }
  8. ])

成就模式:

  1. {
  2. "name" : "testing","id" : 1,"max" : 12,},{
  3. "name" : "testing2","id" : 2,}

成就用户

  1. {
  2. "userid" : 33,progress: 1,{
  3. "userid" : 446,}

所需的输出

  1. {
  2. name: "testing",id: 1,userid: 33,max : 12,{
  3. name: "testing2",id: 2,progress: 0,

编辑:

我需要用户已完成但尚未完成的所有成就(未完成=进度= 0).

这可能是用户尚未完成的成就.我也要列出它们,但要使进度值为0.

更新2:
也需要它给我结果,而那个特殊用户ID的Achievement_users中没有匹配项.

最佳答案
您可以使用以下汇总

  1. db.achievement_users.aggregate([
  2. { "$match": { "userid": 33 }},{ "$lookup": {
  3. "from": "achievement","let": { "id": "$id","progress": "$progress","userid": "$userid" },"pipeline": [
  4. { "$addFields": {
  5. "progress": { "$cond": [{ "$eq": ["$id","$$id"] },"$$progress",0] },"userid": "$$userid"
  6. }}
  7. ],"as": "inventory_docs"
  8. }},{ "$unwind": "$inventory_docs" },{ "$replaceRoot": { "newRoot": "$inventory_docs" }}
  9. ])

猜你在找的JavaScript相关文章