我有一个纸牌数据库,其中的发行量除以其states
。
卡只有状态。
状态可以是open
或closed
。
所有卡都有一个关联的键值,称为boardID。每张卡只能有boardID。多个卡可以属于一个boardID。
我正在尝试查询状态为closed
且boardID
是给定值的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
应该可以解决问题
答案 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
,这在我搜索多个州时特别有用