【发布时间】:2014-08-20 17:01:11
【问题描述】:
我是 Node.js 的新手,接下来要做的是:
在我的模型中,我有这种结构的“围场”:
{
_id: ObjectId("53f39dd0ad2f71d36a872cf4"),
name: "2 animals",
size: "523",
latitude: "",
longitude: "",
propertyId: "53f39dc9ad2f71d36a872cf3"
}
我有动物,一个围场可以分配多只动物,这样:
{
_id: "123123",
propertyId: "53f39dc9ad2f71d36a872cf3",
paddockId: "53f39dd0ad2f71d36a872cf4",
breed: "NO",
groupId: "53f3a28f50364eaa7243c621",
birthDate: "2014-08-12T03:00:00.000Z",
gender: "F",
traceable: "true",
pureBreed: "true",
active: "true"
}
我想要做的是,对于每个围场,检索动物的数量。 看到这一行:
paddock.cattlesQuantity = items.length;
奇怪的是,当每个围场有几只动物时,动物总是返回 0。
我做了一个查询的 console.log 并在 mongo 控制台上使用了查询,它检索了我的动物,但这样做却没有。
router.post('/paddockListById', function(req, res) {
var db = req.db;
var propertyId = req.body.propertyId;
db.collection('paddock').find({"propertyId": propertyId}).toArray(function (err, paddocks) {
if(paddocks.length > 0){
var counter = 0;
var paddockArray = new Array();
paddocks.forEach(function(paddock){
db.collection('animal').find({"paddockId": paddock._id}).toArray(function (err, items) {
counter ++;
paddock.cattlesQuantity = items.length;
paddockArray.push(paddock);
if(counter == paddocks.length){
res.send(
(err === null) ? { status: 'ok', result: paddockArray } : { status: err }
);
}
});
});
}
else{
res.send(
(err === null) ? { status: 'ok', result: paddocks } : { status: err }
);
}
});
});
有什么想法吗?
【问题讨论】:
-
可能与计数器竞争任务。我写了一个非常相似的循环,尽管它使用了超时功能:pastebin.com/nDbKepnM
标签: javascript node.js mongodb express foreach