我正在为我的应用程序中的商品(产品)制定用户评价(竖起大拇指/不赞成)。
我似乎可以用对象数组实现我想要的功能,但是我想知道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(单击了大拇指的用户)实现为数字数组。向上和向下字段是该特定产品的向上和向下投票的总运行计数。
仅查看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]}
如果有谁知道我会如何隐密u_down
到一个true
与蒙戈标志,像下面的一个。我很想知道。
{"_id": 23412,
"down": 0}
{"_id": 12332,
"down": 2,
"u_down": true}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句