猫鼬如何找到具体的价值
Posted
技术标签:
【中文标题】猫鼬如何找到具体的价值【英文标题】:Mongoose how to find specific value 【发布时间】:2018-05-10 03:09:37 【问题描述】:大量阅读后,我被卡住了。 我在这里发布的代码是我正在尝试制作的商店数据库的实现。 在每家商店,我们都有一些领域。我有兴趣对包含 JSON 变量的 items 数组做一些事情。 我想通过三个过滤器过滤商品,首先是商店 ID,其次是类别 ID,最后一个过滤器是半类别 ID。
我想从前端发送数据,这意味着我提供STOREID
、CategoryID
和SemiCategoryID
。
在后端收到数据后,我希望根据前端提供的数据只收到相关的项目。
"_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(..);
如果这不是你想要的,请告诉我,然后我们可以继续一起努力解决这个问题。
编辑:所以您从前端发送变量StoreID
、CategoryID
和SemiCategoryID
。在后端接收它们,并且想要过滤匹配所有三个字段的数据库集合?
如果是这样..那么我认为您所要做的就是更改您当前的查询:
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) 我看到它看起来你的答案只会给我商店的价值.. 不?以上是关于猫鼬如何找到具体的价值的主要内容,如果未能解决你的问题,请参考以下文章