gpt4 book ai didi

MongoDB:在数字或字符串数​​组上使用 $elemMatch

转载 作者:行者123 更新时间:2023-12-02 01:03:56 24 4
gpt4 key购买 nike

我正在为我的应用中的项目(产品)进行用户评分(赞/不赞)。

我似乎能够通过对象数组实现我想要的,但我想知道 mongodb 是否提供了一种方法来使用数字数组 (user_ids) 实现这一点。

db.items.insert({up: 2, down: 3, u_up: [{id: 1}, {id:2}], u_down: [3,4,5]})
db.items.insert({up: 3, down: 3, u_up: [{id: 1}, {id:2}, {id:3}], u_down: [7,8,9]})
db.items.insert({up: 0, down: 0, u_up: [], u_down: []})
db.items.insert({up: 2, down: 2, u_up: [{id:2},{id:3}], u_down: [7,9]})

为了帮助解释我正在尝试做的事情,我将 u_up(点击竖起大拇指的用户)实现为一个对象数组,将 u_down(点击向下的用户)实现为一个数字数组。 up 和 down 字段是对该特定产品的赞成票和反对票的总运行计数。

只查看 u_up,如果我运行以下查询,

db.items.find({}, {up: 1, u_up: {$elemMatch: {id: 2}}})

让我回到我想要的东西.. 用户 2 的所有四个项目,但只有在该用户投票赞成时才会填充 u_up。所以,我会知道他已经对那个特定的项目投了赞成票,同时取回他没有投票的所有项目。我不想知道查询结果中的其他用户。

 {"_id": 2345,"up": 2,
"u_up": [{"id": 2}]}

{"_id": 4432,
"up": 3,
"u_up": [{"id": 2}]}

{"_id": 2345,
"up": 0}

{ "_id": 2345,
"up": 2,
"u_up": [{"id": 2}]}

必须为每个用户存储整个对象似乎有点浪费,我希望改用数组(就像我在上面为 u_down 实现的那样)。

mongodb 中是否有可以实现此目的的查询?或者返回一个标志或其他东西来表明用户已经投票赞成或反对,但同时返回他没有投票的产品?

谢谢。

最佳答案

看来这确实有效...

db.items.find({}, {down: 1, u_down : {$elemMatch: {$in: [9]}}})

给予

 {"_id": 23123,
"down": 3}

{"_id": 34123,
"down": 3,
"u_down": [9]}

{"_id": 23412,
"down": 0}

{"_id": 12332,
"down": 2,
"u_down": [9]}

如果有人知道我如何使用 mongo 将 u_down 转换为 true 标志,如下所示。我很想知道。

 {"_id": 23412,
"down": 0}

{"_id": 12332,
"down": 2,
"u_down": true}

关于MongoDB:在数字或字符串数​​组上使用 $elemMatch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24991273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com