使用sails.js和mongodb查找子数组中对象id $的文档

时间:2014-02-28 19:19:33

标签: node.js mongodb sails.js waterline

所以我有一个模型用于配方,它具有'成分'的关系,而这只是一个ObjectIds数组。当我在mongo shell上运行以下查询时,它工作正常并返回我的所有数据。

Example model :
{
"name": "...",    
"_id": ObjectId("530ca903746515c0161e6b9f"),    
"ingredients": [
    ObjectId("53069363ff7447a81a3a7a1d"),
    ObjectId("53069363ff7447a81a3a7a17")
 ]    
}

Query:
db.drink.find({"ingredients":{"$in":[ObjectId("53069364ff7447a81a3a7a87"), ObjectId("530fb948c1a3ff480d58e43c")]}});

虽然他们使用sails.js作为他们的水线,他们实际上没有办法查询这个,或者至少通过我能找到的任何可能的谷歌搜索。因此,尝试使用本机驱动程序,我有类似以下内容 -

var ings = new Array();
for (var i in req.body) {
  ings.push(new ObjectID(req.body[i].toString()));
}
Drink.native(function(err, collection){
  if(err){
    return res.send(err, 500);
  } else {
    collection.find({"ingredients":{"$in":ings}}).toArray(function(err, data){
      console.log(data);
    });
  }
});

问题是回调中返回的数据数组总是为空。如果我检查'ings'数组,它是一个objectids数组,所以我不知道为什么它不会返回任何数据。如果我删除'find'函数中的json对象,它会返回所有内容。任何人都知道在使用sails.js时如何使这个查询返回数据?

1 个答案:

答案 0 :(得分:0)

上面的代码实际上正在工作,这是mongodb上的内部数据问题,其中ID在关系之间不匹配。当关系重建时,一切都正常。