mongoose 如何在不知道查询过滤器的情况下只返回MongoDB中第一个文档的值

smtd7mpg  于 2023-03-12  发布在  Go
关注(0)|答案(3)|浏览(118)

在使用findOne()时,我尝试通过将字段名称附加到查询来提取字段的值
我的 Mongoose 收集所谓的产品:

{ "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L" ] }
{ "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] }
{ "_id" : 3, "product" : "Cap", "sizes" : [ "M", "L" ] }

下面是我的javascript(简化版):

app.post("/", async function(req, res){

const product = await products.findOne().product;
console.log(product);

});

我期待 bat 回来,但我却得到了未定义。
(编辑)大家好,我看起来好像不知道查询过滤器是什么。我真实的的代码是获取第一个文档,然后通过API重新运行它,以更新信息,删除第一个文档,并在我的数据库中创建一个新文档。我希望这段代码在我的数据库中一直运行,这样第一个文档每次都会更改。
在这个例子中,它将从Bat到Hat再到Cap,我需要通过我的API运行。
抱歉,我没说清楚。我想让问题简单点。

wyyhbhjk

wyyhbhjk1#

为此,你需要提到查询过滤器。在这里,你可以只做一个简单的修改你的代码。

const product = await products.findOne({ product: "Bat" });

console.log(product.product);
mrzz3bfm

mrzz3bfm2#

如果你想返回所有的产品值,然后,试试这个..

db.products.insertMany([
  { "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L" ] },
  { "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] },
  { "_id" : 3, "product" : "Cap", "sizes" : [ "M", "L" ] }
]);

db.products.distinct("product");

这将返回[“ bat ”,“帽子”,“帽子”]
如果希望返回产品BAT,则使用findOne查询,

db.products.insertMany([
  { "_id" : 1, "product" : "Bat", "sizes" : [ "S", "M", "L" ] },
  { "_id" : 2, "product" : "Hat", "sizes" : [ "S", "L", "XL" ] },
  { "_id" : 3, "product" : "Cap", "sizes" : [ "M", "L" ] }
]);
db.products.findOne({ "_id": 1 }, { product: 1 } ).product
wwtsj6pe

wwtsj6pe3#

好的,这就是我最后做的,我用了一个for循环来遍历我的非重复数组,我可能会放一个setInterval,这样我就不会把API用到最大。

app.post("/", async function(req, res){

for (var i=0; i<products.length; i++) {

const data = await products.distinct("product");
const product = data[i];

console.log(product);
}

});

相关问题