我试图查询allFriends
内ID与Creator
ID匹配的所有实例。 allFriends
是来自早期查询的ID数组。带有指针数组的containedIn
的正确语法是什么。
allFriends:
["1EGomEr0Tk", "iMJbVrPfGG", "DVOwabZkaQ", "zhvd8mAdhl"]
代码:
query.containedIn("Creator", {
__type: "Pointer",
className: "User",
objectId: allFriends
})
错误:
code: 102
error: "$in requires an array"
我发现我需要将allFriends
ID数组转换为指针映射。但是_.map
被计算为未定义。
代码:
var pointers = _.map(allFriends, function(item_id) {
var pointer = new Parse.Object("allFriends");
pointer.id = item_id;
return pointer;
});
query.containedIn("Creator", pointers);
错误:
Uncaught ReferenceError: map is not defined
答案 0 :(得分:11)
如果您的“创建者”列的类型为Pointer< _User>并且您的allFriends
数组是用户的ID数组,那么您需要这样做:
创建一个Pointer< _User>数组来自allFriends
的对象:
var pointers = _.map(allFriends, function(friendId) {
var pointer = new Parse.User();
pointer.id = friendId;
return pointer;
});
一旦你有一个指针数组< _User>然后,您可以比较您的专栏:
query.containedIn('Creator', pointers);
你非常接近,这只是创造正确指针的问题。
答案 1 :(得分:5)
Parse允许您定义指针列或数组列。数组是标量类型(数字,字符串等)的有序集合,或者它们可以是指针数组。
<强>指针强>
获取和设置指针时,操作数是PFObject。换句话说,对于二传手:
myObject.set("somePointerCol", someOtherObject);
其中someOtherObject是一个PFObject,可能是一个空的PFObject,只定义了一个ID(正如你在编辑中正确指出的那样)。对于吸气者:
myQuery.first().then(function(myObject) {
var someOtherObject = myObject.get("somePointerCol");
});
someOtherObject将是一个空的PFObject,只设置了objectId。如果您希望同时获取引用的对象,则可以按如下方式限定查询:
myQuery.include("somePointerCol");
// someOtherPointerCol on the retrieved object will contain a complete, fetched object
指针的数组和数组
PFObject为数组提供了几种方法,您可以使用add
和addUnique
添加到数组中,并使用remove从中删除。优雅的部分是,当数组是一个指针数组时,这些方法可以很容易地应用。
myObject.addUnique("arrayOfPointersCol", someOtherObject);
// or...
myObject.remove("arrayOfPointersCol", someOtherObject);
最后,PFQuery相当透明地处理数组。要找到任何包含PFObject的arrayOpPointersCol的myObject,请使用equalTo,就像它只是一个值一样。
myQuery.equalTo("arrayOfPointersCol", someOtherObject);
// if you have only an id, say someId, then
var SomeOtherClass = Parse.Object.extend("SomeOtherClass");
var someOtherObject = new SomeOtherClass();
someOtherObject.id = someId;
myQuery.equalTo("arrayOfPointersCol", someOtherObject);
与非数组指针类似,您可以急切地获取该数组中的所有元素:
myQuery.include("arrayOfPointersCol"); // but be careful, keep array lengths short
<强>下划线强>
最后,与数组或指针思想无关,您当然可以映射对象ID数组,将它们转换为指针对象数组。您发布的代码看起来很好,但它取决于the underscore library - 这是一个非常有用的库,可以提供_.map函数等。
答案 2 :(得分:1)
可能有点晚,但您也可以使用方法createWithoutData
从ID构建对象
答案 3 :(得分:0)
如果要具有多指针列,只需创建数组列并用_User对象填充它。结果看起来像这样,它实际上是指针数组:
[{"__type":"Pointer","className":"_User","objectId":"kIg9Kzzls9"},
{"__type":"Pointer","className":"_User","objectId":"TGCBZm52zW"},
{"__type":"Pointer","className":"_User","objectId":"YfGT9GvJs6"}]
使用include在查询中获取完整的对象也可以,它是一个指针数组。