Nodejs Mongoose - 检查数组对象值是否存在,如果不存在则向数组添加一个新对象

问题描述

我对 nodejs 很陌生。我想检查 mongodb 值是否存在,如果存在,更新链接视图,如果不存在,我想将一个对象推送到数组中。任何人都可以帮助我如何编写语句来检查 db 中的值是否存在?请帮忙

所以这是 Admin 架构

{        
  "_id": "67324b2cc6817758118e9557d8","name": "James","__v": 0,"affiliatelink": [
    {
      "storeId": 60014d6e7286763490c3543,"storeName": white choc,"linkview": 1
    }
  ]
}`


这是我当前的代码

Admin.findById(adminId).then(admin =>{
if(admin){
//if affiliatelink.storeId = storeId(exist)
Admin.update({ _id: adminId,"affiliatelink.storeId": storeId},{$inc: {"affiliatelink.$.linkview": 1}},(err,result) => {
    if (err) {
    console.log("error "+err)
    } 
    else {
      //push an object into array
    }

  });
 

我尝试这样做只是为了检查 if else 语句是否有效。但它不起作用。

const res = await Admin.find({"affiliatelink.storeId":storeId; //use async in function deFinition
console.log(res);
if (check in res) {
  console.log("item is existed")}
else {
  console.log("item is not existed")
}

解决方法

在您的第三个代码片段中,您正在执行一个查找操作,它将返回一个 [] 的空数组,该数组将被视为 true,因此这就是控件不进入 else 条件的原因。 使用 findOne 而不是 find(如果 storeId 是唯一的),否则只需检查查询响应的长度是否大于或等于 0。