【问题标题】:Find an unique record in an array in mongodb在mongodb的数组中查找唯一记录
【发布时间】:2020-06-23 10:44:40
【问题描述】:

我有以下方式的数据

{ _id:1, Student:"A", Subject:"Language", AddressStates:[{state:"NY"}] }, 
{ _id:2, Student:"A", Subject:"Math",AddressStates:[{state:"CA"},{state:"FL"}]}, 
{ _id:3, Student:"B", Subject:"Science", AddressStates:[{state:"CA"}] }, 
{ _id:4, Student:"A", Subject:"Arts" }, 
{ _id:5, Student:"C", Subject:"Biology" AddressStates:[{state:"NY"}]}, 
{ _id:6, Student:"B", Subject:"History" AddressStates:[{state:"NY"}]}

在创建 mongo 查询以获取具有“CA”以外状态的学生的记录时需要帮助。我期望的输出只是“学生 C”记录,而不是学生 A 和 B,因为他们在记录中有状态“CA”。

非常感谢任何帮助。

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    这会起作用

      db.collection.aggregate([
      {
        $group: {
          _id: "$Student",
          doc: {
            $push: "$$ROOT"
          }
        }
      },
      {
        $match: {
          "doc.AddressStates.state": {
            $ne: "CA"
          }
        }
      }
    ])
    

    https://mongoplayground.net/p/iwoXeiSs_pv

    【讨论】:

    • 我正在尝试找到除“CA”以外的其他州的学生。所以只有这样的学生是学生 C,因为分配给他的州是“NY”
    • 好的,请稍等。 . .
    • 检查新答案
    • 这将给学生 A ,学生 B 和学生 C 作为输出,因为学生 A 有多个记录,其中一个是“CA”,另一个是非 CA...但我只需要学生 C因为他只有非 CA 州
    • {$ne:"CA"} 只会给你没有'CA'的结果,有4个没有'CA'的文档,但如果你只想要学生:“C”除了没有“CA”之外,您还必须提及其他独特的特征。
    【解决方案2】:
    Model.find({
      "AddressStates.state": "NY"
    })
    

    https://mongoplayground.net/p/vk-pdOuwtvt

    检查链接并点击,左上角运行你会得到结果。您将获得 2 个数据学生 A 和 C

    【讨论】:

    • 我只需要学生 C 记录,我正在寻找只有州“NY”的学生
    • 那么你必须运行 2 个条件。 Model.find({ 'Subject':"Biology", "AddressStates.state": "NY" })
    • 你要求放记录的所有字段,那么查询有什么用,这是不可行的,我有150多个字段在生产中......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-21
    相关资源
    最近更新 更多