mongoose find $ in array给出空答案

时间:2015-09-24 15:26:09

标签: node.js mongodb mongoose

我将文档存储在MongoDB中的不同版本中。我上传了可以更改状态的同一文档的新版本。我会用GUID识别它们。

我的模特:

var Issue = new Schema({
  DatePosted: {type: Date, default: Date.now}
  GUID: {type: String},
  Status: {type: String},
}

让我说我有一些文件:

{[
  DatePosted: "2015-09-21T15:46:39.753Z",
  GUID: "199b4534-8ffb-4045-a9d3-b71fc61298f4",
  Status: "Status 3"
],
[
  DatePosted: "2015-09-20T15:46:39.753Z",
  GUID: "199b4534-8ffb-4045-a9d3-b71fc61298f4",
  Status: "Status 1"
],
[
  DatePosted: "2015-09-21T15:46:39.753Z",
  GUID: "3c53a75e-e31e-49e4-8be0-0b94e591758f",
  Status: "Status 2"
],
[
  DatePosted: "2015-09-20T15:46:39.753Z",
  GUID: "3c53a75e-e31e-49e4-8be0-0b94e591758f",
  Status: "Status 0"
]}

我现在希望只根据GUID获取最新版本的文档。所以在这种情况下,我希望这是结果:

{[
  DatePosted: "2015-09-21T15:46:39.753Z",
  GUID: "199b4534-8ffb-4045-a9d3-b71fc61298f4",
  Status: "Status 3"
],
[
  DatePosted: "2015-09-21T15:46:39.753Z",
  GUID: "3c53a75e-e31e-49e4-8be0-0b94e591758f",
  Status: "Status 2"
]}

我的方法是首先获取所有唯一的GUID,然后尝试通过唯一的GUID获取每个文档的最新版本。

var guidArr = [];

Issue.find()
  .where('GUID')
  .distinct('GUID')
  .exec(function(err, docs) {
    guidArr = docs;
  });
// -> guidArr = ['199b4534-8ffb-4045-a9d3-b71fc61298f4', '3c53a75e-e31e-49e4-8be0-0b94e591758f']

Issue.find({
  'GUID': {$in: guidArr}}, function(err, docs) {
  res.status(200).send(JSON.stringify(docs));
});
// -> docs = []

这将返回一个空对象[] ...但是如果我像

那样手动编写GUID
Issue.find({
  'GUID': {$in:
    ['199b4534-8ffb-4045-a9d3-b71fc61298f4',
     '3c53a75e-e31e-49e4-8be0-0b94e591758f']}}, function(err, docs) {
  res.status(200).send(JSON.stringify(docs));
});
// -> docs = all documents in the db that has those GUIDs

这将返回集合中的所有对象(在本例中为4个文档)。

两个问题: 当我给find()一个数组(guidArr)时,为什么我得到一个空对象,但是当我给它硬编码数组时,一切似乎都在工作?

如何在第二个find()中获取最新版本的文档?

我可以在一个链式问题中对数据库执行此操作吗?我的方法似乎不是最佳实践......

0 个答案:

没有答案