猫鼬如何找到具体的价值

Posted

技术标签:

【中文标题】猫鼬如何找到具体的价值【英文标题】:Mongoose how to find specific value 【发布时间】:2018-05-10 03:09:37 【问题描述】:

大量阅读后,我被卡住了。 我在这里发布的代码是我正在尝试制作的商店数据库的实现。 在每家商店,我们都有一些领域。我有兴趣对包含 JSON 变量的 items 数组做一些事情。 我想通过三个过滤器过滤商品,首先是商店 ID,其次是类别 ID,最后一个过滤器是半类别 ID。

我想从前端发送数据,这意味着我提供STOREIDCategoryIDSemiCategoryID。 在后端收到数据后,我希望根据前端提供的数据只收到相关的项目。


    "_id": 
        "$oid": "5a1844b5685cb50a38adf5bb" --> **ID of the STORE**
    ,
    "name": "ACE",
    "user_id": "59e4c41105d1f6227c1771ea",
    "imageURL": "none",
    "rating": 5,
    "items": [
        
            "name": "NirCohen",
            "categoryID": "5a0c2d292235680012bd12c9",
            "semiCatID": "5a0c2d5a2235680012bd12ca",
            "_id": 
                "$oid": "5a1958181cd8a208882a80f9"
            
        ,
        
            "name": "he",
            "categoryID": "5a0c2d292235680012bd12c9",
            "semiCatID": "5a0c2d5a2235680012bd12ca",
            "_id": 
                "$oid": "5a1973c40e561e08b8aaf2b2"
            
        ,
        
            "name": "a",
            "categoryID": "5a0c2d292235680012bd12c9",
            "semiCatID": "5a0c2d5a2235680012bd12ca",
            "_id": 
                "$oid": "5a197439bc1310314c4c583b"
            
        ,
        
            "name": "aaa",
            "categoryID": "5a0c2d292235680012bd12c9",
            "semiCatID": "5a0c2d5a2235680012bd12ca",
            "_id": 
                "$oid": "5a197474558a921bb043317b"
            
        ,
    ],
    "__v": 9

我希望后端根据查询返回过滤后的项目。 问题是,我无法获得正确的查询。

您的帮助将不胜感激,

提前谢谢你。

【问题讨论】:

您能否尝试更好地解释您想要发生的事情?调用mongo的函数在哪里?您的结果是什么?您的预期结果是什么? 目前有一个基本查询猫鼬只弹出商店,我想获取与 categoryID 和 subcategoryID 匹配的所有“项目”(名称)。我想获得一个 json 列表\数组,其中包含与商店 ID(我已经成功)匹配并与其他参数(categoryID、semiCategoryID)匹配的所有项目(名称字段) 所以你正在获取一个对象,只获取 storeID 但你想填充 Store 对象?看看这个mongoosejs.com/docs/populate.html 嗨,我得到了 storeID、categoryID 和 samiCategoryID,我只需要知道就可以通过这个 id 进行查询。 嗨,@nircohen 你能检查一下吗 -> ***.com/questions/21274306/… 并在 or 的地方你需要使用 and 【参考方案1】:

如果我理解正确,您正在做这样的事情:

Store.find().then(..);

如果您只想找到 categoryID 等于变量 myCategory 的商店,您可以使用以下方法将它们过滤掉:

Store.find(semiCatID: myCategory).then(..);

如果这不是你想要的,请告诉我,然后我们可以继续一起努力解决这个问题。

编辑:所以您从前端发送变量StoreIDCategoryIDSemiCategoryID。在后端接收它们,并且想要过滤匹配所有三个字段的数据库集合? 如果是这样..那么我认为您所要做的就是更改您当前的查询:

store.findOne( _id: req.body.userID , (err, store) =>  console.log(store); ); 

类似于:

store.findOne(
    _id: req.body.userID,
    storeID: req.body.StoreID,
    categoryID: req.body.CategoryID,
    semiCategoryID: req.body.SemiCategoryID
, (err, store) =>  console.log(store); ); 

这样,您从 mongo 返回的对象必须符合前端给出的所有四个条件。

【讨论】:

嗨,首先谢谢。我编辑了我的帖子,以使我的问题更清楚。现在这是我的查询 .... store.findOne( _id: req.body.userID , (err, store) => console.log(store); ); @nircohen 我已经编辑了答案,希望能达到您想要的结果。 我试过你查询,如果你没有看到 categoryID 和 semiCategoryID 有在调用'items'的数组中,那么我应该使用 items.categoryID 和 items.semiCategoryID 吗?非常感谢您的帮助! 在查询中我尝试执行此操作“”items.categoryID“:req.body.category”,但它不起作用。有什么想法吗?【参考方案2】:

据我了解,您的问题是我的回答,您可以使用 findById

Store.findById(//store id).then(..);

Store.findOne(_id:ObjectID(storeID)).then(..);

【讨论】:

我不明白你的回答。因为,我不需要按 3 个 ID 过滤? (Store,Category,SemiCategory) 我看到它看起来你的答案只会给我商店的价值.. 不?

以上是关于猫鼬如何找到具体的价值的主要内容,如果未能解决你的问题,请参考以下文章

如何找到 Spark-streaming 中价值最小的键值对?

给定一些美元价值时如何找到所有硬币组合[关闭]

如何在cypress中复制价值并找到用户

如果给出一些美元价值,如何找到所有硬币组合

如何在数据库中找到真正的价值?

如何在猫鼬模式中使用异步默认值?