【问题标题】:validate if documents have same data as I send验证文档是否与我发送的数据相同
【发布时间】:2021-12-31 00:29:44
【问题描述】:

我在数据库中有以下文档:(每个文档都是一个有成员的房间)

[
  {
    "id": "room1",
    "members": [{
      "id": "member1",
      "acks": "XXX",
    },{
      "id": "member2",
      "acks": "XXX",
    },{
      "id": "member3",
      "acks": "XXX",
    },{
      "id": "member4",
      "acks": "XXX",
    }]
  },
  {
    "id": "room2",
    "members": [{
      "id": "memberA",
      "acks": "XXX",
    },{
      "id": "memberB",
      "acks": "XXX",
    },{
      "id": "memberC",
      "acks": "XXX",
    },{
      "id": "memberD",
      "acks": "XXX",
    },{
      "id": "memberE",
      "acks": "XXX",
    },{
      "id": "memberF",
      "acks": "XXX",
    }]
  },
  {
    "id": "room3",
    "members": [{
      "id": "memberX",
      "acks": "XXX",
    },{
      "id": "memberY",
      "acks": "XXX",
    },{
      "id": "memberZ",
      "acks": "XXX",
    }]
  }
]

从前端发送下一个数据:

[{
  "id": "room1"
  "members": ["member1", "member2"]
},{
    "id": "room2"
  "members": ["memberA", "memberB", "memberC", "memberF"]
},{
  "id": "room3"
  "members": ["memberX", "memberY"]
}]

我想检查每个房间的所有成员是否匹配,并返回一个唯一的布尔值作为响应 --> 如果全部匹配则返回 True,如果不匹配则返回 False。

此数据应返回 false:

[{
  "id": "room1"
  "members": ["memberA", "member2"] //Because memberA is not in room1
},{
  "id": "room2"
  "members": ["memberA", "memberB", "memberC", "memberF"]
},{
  "id": "room3"
  "members": ["memberX", "memberY"]
}]

Playground

是否可以通过一个查询来实现?

非常感谢您。

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

    你可以试试查询,

    1. 根据前端请求准备查询请求

    // consider this is your request parameter
    let request = [{
      "id": "room1",
      "members": ["member1", "member2"]
    },{
        "id": "room2",
      "members": ["memberA", "memberB", "memberC", "memberF"]
    },{
      "id": "room3",
      "members": ["memberX", "memberY"]
    }];
    // prepare query
    let query = request.map((r) => {
      return { 
        id: r.id, 
        members: r.members.map((m) => {
          return { "members.id": m }
        })
      }
    });
    console.log(query)
    1. 尝试countDocuments 函数并获取有请求的房间总数
    async function hasRooms (query) {
      let count = await Schema.countDocuments({ $or: query });
      return (count === request.length);
    }
    

    Playground

    1. 使用你的函数
    console.log(await hasRooms(query));
    

    【讨论】:

      猜你喜欢
      • 2021-07-21
      • 1970-01-01
      • 2013-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多