keystone
Version:
Web Application Framework and Admin GUI / Content Management System built on Express.js and Mongoose
93 lines (57 loc) • 2.47 kB
Markdown
in the model, which belongs to another List in the system.
When the `many: true` option is set, it stores an Array `[ObjectID]` instead.
Displayed as an auto-suggest field in the Admin UI.
Specify the related Model using the `ref` option. For a many-many relationship, set the `many` option to `true`.
Linking to a **Post** model to a single **Author** and many **PostCategories** can be done like this:
```js
Post.add({
author: { type: Types.Relationship, ref: 'User' },
categories: { type: Types.Relationship, ref: 'PostCategory', many: true }
});
```
Expands the stored value into an object containing `{ id, name }` properties.
The name is set by the `getDocumentName` method on the related List.
In `many` mode, an array of objects `[{ id, name }]` is returned.
The relationship path must be populated or this method will return unexpected results.
```js
Post.model.findOne(id)
.populate('author') // author is a relationship to the User list
.exec((err, post) => {
post._.author.getExpandedData() // { id: '1', name: 'Jed Watson' }
});
```
Returns the stored value as a `String`.
In `many` mode, the values in the array will be joined into a comma, space delimited list.
Will return unexpected results if the relationship path has been populated.
Updates with the provided value if it is different from the stored value.
`undefined` values are ignored.
When `null` is passed, mongoose will remove the path from the stored document and the value will be `undefined` when the item is next retrieved. This behaviour is different in `many` mode, when an empty array will be stored.
Ensures the value, if provided, is a string (or an array of strings in `many` mode).
Allows `null` to clear the field value.
### `validateRequiredInput`
Ensures a value has been provided. Empty strings are not valid.
## Filtering
Accepts a value (is an array of ObjectIDs), and can be inverted. Will match any items containing a relationship to _any_ of the provided ObjectIDs in the value array.
```
{
inverted: Boolean,
value: [ObjectID],
}
```
An empty `value` will match items containing `null` (single) or `[]` (many) stored in the field path.
Inverting the filter finds all items **not** matching the value.
Default filter arguments are:
```
{
inverted: false,
value: [],
}
```
Stores an `ObjectID`