基本上,我设法从集合中返回所有对象。如何返回单个元素,例如\n\xc2\xa0\xc2\xa0 的样式findOne({_ id:" 5e82d378527bb420a4001aaf ")?
我知道如何使用 $match,但这会返回各种结果。
\n\nlet _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})\nRun Code Online (Sandbox Code Playgroud)\n
考虑一个样本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)
返回满足集合或视图上指定查询条件的一份文档。如果有多个文档满足查询,则该方法按照自然顺序返回第一个文档,该自然顺序反映了文档在磁盘上的顺序。
如果findOne没有找到文档,则返回一个null. 但是聚合返回一个游标,您可以对结果应用游标方法。
| 归档时间: |
|
| 查看次数: |
14510 次 |
| 最近记录: |