此查询完美无缺
{
$or:[{author:this.userId} , {somethingelse:true} ]
}
但是当我尝试时:
{
$or:[{author:this.userId} , {sharedwith[this.userId]:true} ]
}
我收到了消息
错误阻止启动:
使用ecmascript处理文件时(对于目标os.linux.x86_64):server / main.js:113:43:意外的令牌,预期 ,(113:43)=>您的应用程序有错误。等待文件更改。
那就是$或语句中逗号,的位置
帮助
答案 0 :(得分:2)
我想您是要尝试检索当前用户是作者的所有文档,或已与他/她共享?因此,您使用sharedWith
字段构建了文档,该字段是userId
作为键的哈希映射,boolean
作为值?
文件结构:
{
author: string,
sharedWith: {
<userId1>: boolean
// <userId2>…
}
}
在这种情况下,您的MongoDB查询应使用dot notation指定sharedWith
字段中嵌套字段的值:
{
$or: [{
author: string
}, {
"sharedWith.<userId>": boolean
}]
}
要使用插值<userId>
轻松创建查询,您可以在对象中使用computed key(ES6语法):
{
$or:[{
author: this.userId
} , {
// The query computed key must be in square brackets.
// Specify the field child key using the dot notation within your query.
["sharedwith." + this.userId]: true
}]
}
或者使用旧的ES5语法,类似于@ MichelFloyd的回答:
var query = {
$or: [{
author: this.userId
}]
};
var newCondition = {};
newCondition["sharedWith." + this.userId] = true;
query.$or.push(newCondition);
注意:上述文档结构可以方便地用数组替换sharedWith
哈希映射(因为布尔值的false
值可以简单地通过删除来替换数组中相应的userId
:
{
author: string,
sharedWith: [
<userId1>
// <userId2>…
]
}
在这种情况下,查询只是become:
{
$or:[{
author: this.userId
} , {
// In MongoDB query, the below selector matches either:
// - documents where `sharedWith` value is a string equal to
// the value of `this.userId`, or
// - documents where `sharedWith` value is an array which contains
// an element with the same value as `this.userId`.
sharedwith: this.userId
}]
}
答案 1 :(得分:0)
在运行之前尝试将查询构建为变量。
let query = { $or: [{ author: this.userId }]};
const sw = sharedwith[this.userId];
query.$or.push({sw: true});
MyCollection.find(query);