- 需求的场景描述(希望解决的问题)
例如下列数据:
[ { "_id": "1", "name": "张三", "tag": [ { "type": "射击", "point": 8 }, { "type": "拳击", "point": 3 } ] }, { "_id": "2", "name": "李四", "tag": [ { "type": "射击", "point": 6 }, { "type": "大刀", "point": 5 } ] }, { "_id": "3", "name": "王五", "tag": [ { "type": "拳击", "point": 7 }, { "type": "射击", "point": 6 }, { "type": "大刀", "point": 9 } ] } ] |
现在需要列出
tag包含type=“拳击”的人
tag包含point>6的人
- 希望提供的能力
请帮忙给个查询条件的写法。
也许是我的数据储存格式设计有问题,以前没做过NoSql的内容,缺乏经验。有大神帮指点下就好了:)
const _=db.command
等于拳击或大于6
db.collection(‘table’).where(_.or([{tag:{type:‘拳击’}},{tag:{point:_.gt(6)}}]).then()
与运算直接逗号分隔就成
db.collection(‘table’).where({tag:{type:‘拳击’},tag:{point:_.gt(6)}}).then()
还有你的现在的项目是从头开始写的吗?
与运算的写法有点不太理解。
我把上面数据中的张三的“射击”的point改成7,
现在希望精确获取 tag里有 type=拳击并且point=7的,因该只会出现 王五。
用了2种写法,都没成功,都把张三也列出来了。
db.collection(‘testtag’).where({ tag: { type: ‘拳击’ }, tag: { point: 7 } }).get()
和
db.collection(‘testtag’).where({ tag: {type: ‘拳击’, point: 7} }).get()
我以为下面这种写法,{type: ‘拳击’, point: 7}会作为一个整体and条件在tag数组里去检索数据,
但是看到结果,感觉这里是把这2个条件在tag数组里做了or检索。因为张三 有 拳击=3 和 射击=7 ,所以满足了or的条件。
Samsara 还能帮帮我吗?