Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 按对象id排列的数组中的Mongodb findone文档_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js 按对象id排列的数组中的Mongodb findone文档

Node.js 按对象id排列的数组中的Mongodb findone文档,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,通过objectid,我只能获得一张照片吗?我只需要得到一个图片细节,从一个职位的照片,但我得到的是所有的职位照片 这是我的数据库结构 这是我的代码: Post.findOne({ $and: [ { photo: { $elemMatch: { _id: id } } } ] }).exec((err, post) => { if (err) { return res.status(400).json({ error: err }); }

通过
objectid
,我只能获得一张照片吗?我只需要得到一个图片细节,从一个职位的照片,但我得到的是所有的职位照片

这是我的数据库结构

这是我的代码:

 Post.findOne({
  $and: [
    { photo: { $elemMatch: { _id: id } } }       ]
}).exec((err, post) => {
  if (err) {
    return res.status(400).json({ error: err });
  }
  req.post = post;
  console.log(req.post);
  next();
});
Post.find(
  {},
  {
    _id: 0,
    photo: { $elemMatch: { _id: id } }
  }
)
  .lean()
  .exec();
我在req.post中得到的只是[]


提前感谢

您可以尝试使用聚合而不是findOne:


也许不是最好的,但单张照片数据是可以实现的。

您可以尝试使用聚合而不是findOne:

可能不是最好的,但是可以实现单个照片数据。

投影操作符提供了一种更改返回文档的方法,在这里,再加上使用第二个参数,即投影将实现这一点

Post.find(
  {},
  {
    _id: 0,
    photo: { $elemMatch: { _id: id } }
  }
);
这将为lean文档提供承诺:
.lean().exec()

 Post.findOne({
  $and: [
    { photo: { $elemMatch: { _id: id } } }       ]
}).exec((err, post) => {
  if (err) {
    return res.status(400).json({ error: err });
  }
  req.post = post;
  console.log(req.post);
  next();
});
Post.find(
  {},
  {
    _id: 0,
    photo: { $elemMatch: { _id: id } }
  }
)
  .lean()
  .exec();
注意:
$elemMatch
行为是返回
photo
id
匹配的第一个文档。

投影操作符提供了一种更改返回文档的方法,在这里,再加上使用第二个参数projection将实现这一点

Post.find(
  {},
  {
    _id: 0,
    photo: { $elemMatch: { _id: id } }
  }
);
这将为lean文档提供承诺:
.lean().exec()

 Post.findOne({
  $and: [
    { photo: { $elemMatch: { _id: id } } }       ]
}).exec((err, post) => {
  if (err) {
    return res.status(400).json({ error: err });
  }
  req.post = post;
  console.log(req.post);
  next();
});
Post.find(
  {},
  {
    _id: 0,
    photo: { $elemMatch: { _id: id } }
  }
)
  .lean()
  .exec();

注意:
$elemMatch
行为是返回
photo
id
匹配的第一个文档。

如果您想通过id获取照片,无论它是什么帖子,您都可以在搜索条件中执行
{'post.photo.\u id':id}
。是否可以通过PhotoObjectId从照片中获取1?我终于得到了这个[{photo”:[{“\u id”:“5d7dd20185251921882e2ba1”,“data”:“,”contentType“}]}]现在我的问题是我无法获得contentType。post.photo上未定义如果您想通过id获取照片,无论它是什么帖子,您都可以在搜索条件中执行
{'post.photo.\u id':id}
,我仍然可以获取所有照片。通过照片对象id只能从照片中获取1吗?我终于得到了这个[{“照片”:[{“\u id”:“5D7DD20185251921882EBA1”,“数据”:“contentType”:“}]}]现在我的问题是我无法获取contentType。post.photoIt上未定义它给了我这个[{photo:[[Object]]}]。我找不到contentType@kaks该对象应包含所有属性。您可以尝试使用
.lean().exec()
。它给了我这个[{photo:[[Object]]}]。我找不到contentType@kaks该对象应包含所有属性。您可以尝试使用
.lean().exec()