在 Mongodb 中使用 .aggregate 的 findOne 相当于什么?

yav*_*avg 7 mongodb

基本上,我设法从集合中返回所有对象。如何返回单个元素,例如\n\xc2\xa0\xc2\xa0 的样式findOne({_ id:" 5e82d378527bb420a4001aaf ")

\n\n

我知道如何使用 $match,但这会返回各种结果。

\n\n
let _id="5e82d378527bb420a4001aaf"\n\nNoticia.aggregate([\n    {\n        $addFields: {\n            like: {\n                $cond: [{ $in: [_id, "$likes"] }, true, false]\n            },\n            dislike: {\n                $cond: [{ $in: [_id, "$dislikes"] }, true, false]\n            }\n\n        }\n    }\n\n], (err, noticia) => {\n\n    // console.log(trans);\n    if (err) {\n        return res.status(400).json({\n            ok: false,\n            err\n        });\n    }\n    return res.status(200).json({\n        ok: true,\n        data: noticia\n    });\n\n})\n
Run Code Online (Sandbox Code Playgroud)\n

pra*_*ad_ 8

考虑一个样本names集合:

{ _id: 1, name: "Jack", favoriteColor: "blue" },
{ _id: 2, name: "James", favoriteColor: "red" },
{ _id: 3, name: "John", favoriteColor: "blue" }
Run Code Online (Sandbox Code Playgroud)

并使用以下命令运行以下三个查询findOne

db.names.findOne( { _id: 1 } )
db.names.findOne()
db.names.findOne( { favoriteColor : "blue" } )
Run Code Online (Sandbox Code Playgroud)

三个查询的结果相同:

{ "_id" : 1, "name" : "Jack", "favoriteColor" : "blue" }
Run Code Online (Sandbox Code Playgroud)


分别使用聚合 的等效查询如下,具有相同的结果:

db.names.aggregate( [
  { $match: { _id: 1 } },
] )

db.names.aggregate( [
  { $limit: 1 }
] )


db.names.aggregate( [
  { $match: { "favoriteColor" : "blue" } },
  { $limit: 1 }
] )
Run Code Online (Sandbox Code Playgroud)


db.collection.findOne定义说 -

返回满足集合或视图上指定查询条件的一份文档。如果有多个文档满足查询,则该方法按照自然顺序返回第一个文档,该自然顺序反映了文档在磁盘上的顺序。

如果findOne没有找到文档,则返回一个null. 但是聚合返回一个游标,您可以对结果应用游标方法。