为什么查询只返回ID和查询的参数?

时间:2019-07-13 05:29:16

标签: javascript mongodb express mongoose

我有一个纸牌数据库,其中的发行量除以其states

卡只有状态。

状态可以是openclosed

所有卡都有一个关联的键值,称为boardID。每张卡只能有boardID。多个卡可以属于一个boardID。

我正在尝试查询状态为closedboardID是给定值的any(one)的数据库。该查询仅返回卡的ID和boardID,但我需要该卡的所有其他详细信息吗?!

一张卡片有很多细节 -cardName -日期 -说明

我试图通过嵌套for循环并通过ID查找卡片并将结果添加到数组中来获取卡片的详细信息。

这可行,但是问题在于该过程是异步的,我有一个res.send()值,该值在将数据推送到数组之前触发。

应该获取卡详细信息的基本查询

let closed_cards = []
Card.find({ state: "closed" }, { boardID: b }, function (err, data) { res.send(data)
});

查询根据ID提取卡片的信息。

let closed_cards = []
Card.find({ state: "closed" }, { boardID: b }, function (err, data) {
    for (let i = 0; i < data.length; i++) {
      Card.findById(data[i]._id, function (err, e) {
        closed_cards.push(e)
      })
    }

    if (closed_cards != []) {
      res.send(closed_cards)
    }
  })

在第二种情况下,由于异步行为,res.send()发送了一个空数组。

理想情况下,Card.find应该可以解决问题

2 个答案:

答案 0 :(得分:0)

请参阅此处的Model.find()Card.find({ state: "closed" }, { boardID: b }将返回所有处于关闭状态的卡,并从中选择boardID字段,因为第二个参数{ boardID: b }是投影。正确的查询应为Card.find({ state: "closed", boardID: b }

答案 1 :(得分:0)

Card.find({ $and: [{"state": "closed"}}, { "boardID": b }]})

我通常使用$并根据需要打开array,这在我搜索多个州时特别有用